2017-05-14 5 views
0

So war ich auf etwas neugierig. Ich habe zwei Funktionen, arbeiten sowohl die Art, wie ich sie wollen, und sie sind wie folgt:Verwenden Sie den gleichen Parameter in verschiedenen Funktionen

//this function returns the absolute value of a number 
int abs(int y) { 
    if (y < 0) { 
     return -1 * y; 
    } 
    return y; 
} 

//gives a random number, multiplied by x, in the range 1-y 
int randomNum(int x, int y) { 
    srand((int)time(0)); 
    return abs(x * rand() % y) + 1; 
} 

Beide arbeiten, so dass ihre Funktionalität nicht das Problem ist. Aber wenn Sie bemerken, verwenden beide einen Parameter namens "int y".

Meine Frage ist, trotz der Tatsache, dass diese beiden Funktionen funktionieren, ist diese schlechte Praxis, die mich in komplexeren Programmen verschrauben könnte? Oder spielt es keine Rolle, weil die Variablen lokal für ihre jeweiligen Funktionen sind?

Ich meine, es ist offensichtlich keine große Sache, wenn ich einen der "int y" Parameter zu etwas anderem ändere, ich bin nur neugierig, ist alles.

+0

Haben Sie Informationen zum Umfang einer Variablen kennen zu lesen? – lU5er

+1

Jeder Name, der in einem C++ - Programm angezeigt wird, ist nur in einem möglicherweise nicht zusammenhängenden Teil des Quellcodes gültig, der als Bereich bezeichnet wird. http://en.cppreference.com/w/cpp/language/scope –

+1

Offtopic: Sie sollten 'srand' nur einmal in Ihrem Programm aufrufen, nicht bei jedem Funktionsaufruf. – mch

Antwort

0

Immer wenn es eine Variable in Klammern { } gibt, ist es lokal für den Bereich. Sobald aus der braces es einfach stirbt.

Jetzt ist der Code, den Sie fragen,

// y is declared in abs and is alive only in the abs 
int abs(int y) { 
    if (y < 0) { 
     return -1 * y; 
    } 
    return y; 
} 

// the previous y dies here and is inaccessible. 

// a new instance of y is created in randomNum and it's valid till the brace ends 
int randomNum(int x, int y) { 
    srand((int)time(0)); 
    return abs(x * rand() % y) + 1; 
} 

Jetzt ein kleines Ding wie Jawad Le Wywadi

int main() 
{ 
    int a = 0; 
    ++a; 
    { 
     int a = 1; 
     a = 42; 
     cout << a; 
    } 
    cout << a; 
} 

durch ausprobieren wies darauf hin, Probieren Sie es selbst und lassen Sie uns wissen, was Sie erkennen Sie in die Kommentare.

2

Ich denke, es ist in Ordnung für einfache Programme.

Sie sollten jedoch eine Variable mit der gleichen Sorgfalt benennen, mit der Sie ein erstgeborenes Kind benennen .

Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship

Zum Beispiel niemand zieht die Erklärung int foo(int x, int y, int z, int xx, int bb, int cc .....)

+0

Ich nahm an, was Robert Martin sagt, ist der Fall, ich wollte nur um Klärung bitten, danke. –

Verwandte Themen