例如:
int a;
int b;
int value = getValue(a,b);
private int getValue(int a, int b)
{
int value = a+b;
return value;
}
是上述实用或被认为是不好的做法,会在开发后期引起问题。
答案 0 :(得分:9)
我意识到这是一个人为的例子来展示你的要求,但你的例子 包含一个命名问题,我会指出:
int a; // <---- right here
int b; // <---- and here
int value = getValue(a,b); // <--- and a little here
private int getValue(int a, int b)
{
int value = a+b;
return value;
}
问题不在于变量名称是否与方法中调用的名称匹配或不匹配。 问题是变量名称没有被调用的任何有意义的东西。这比你提出的要多得多。
让我们重新考虑你的方法,使这个例子稍微减少设计......
int a;
int b;
int value = GetSum(a,b);
private int GetSum(int firstValue, int secondValue)
{
return firstValue + secondValue;
}
该方法现在有点清洁,更直观地反映了它的用途。现在我们重新提出问题...是否应重命名a
和b
以匹配方法中的问题?
很可能不是。方法中的名称已更改为指示其上下文。该方法得到两个值的总和,第一个和第二个值。那么a
和b
的背景是什么?他们也只知道第一个和第二个吗?或者他们是否传达了一些其他不易获得的含义?类似的东西:
int milesToFirstDestination;
int milesToSecondDestination;
或:
int heightOfPersonInInches;
int heightOfStepstoolInInches;
或两个值的任何其他示例,需要为某些目的求和。如果我们将这个上下文添加到变量名中,那么我们肯定不希望将它添加到方法中。该方法应尽可能通用,在该任务之外执行单个任务而无需担心。
简而言之,这既不好也不坏,因为它甚至不值得考虑。有时,仅凭巧合,名称是相同的。 (例如,这通常可以通过私人助手方法实现。)但是,它们与标准或实践的结果不同,而是由于巧合地具有相同的含义。
答案 1 :(得分:8)
你的意思是总是将一个变量用作方法的参数(在调用网站上),与参数相同,这是一个好习惯。方法签名中的方法? (你的例子不清楚,不会编译,也不包含任何参数......)
不 - 你绝对不需要这样做。在许多情况下,您调用的是一种通用方法,它对您的上下文一无所知 - 但您应该在调用方法中以 在该上下文中有意义的方式命名变量。
答案 2 :(得分:1)
仅在非常有限的情况下。例如,考虑何时需要最少两个量。在调用代码中,您将知道这两个数量是多少。但是在一般的Min(a,b)
方法中,它不知道或不关心这些数量的含义。
如果通常为true,则每个变量名只能在每个程序中使用一次。您将不再需要需要参数传递给方法,并且每个变量都是全局的(假设是单线程代码)。
我们不再编写那样的程序了。对于初学者来说,它使编写递归代码变得不那么容易理解。
答案 3 :(得分:1)
最好是为方法调用和方法签名参数使用相同的名称吗?
我不会有一条规则说必须或应该总是这样做。首先,它提出了实际问题。想象:
private int Square(int n) { return n * n; }
你打算在这做什么:
int a = 3;
int b = 4;
int cSquared = Square(a) + Square(b);
要使a
和b
具有相同的名称并使用名称n
,这是不可能的,甚至没有任何意义。更有意义的是给出在它们被使用的上下文中有意义的参数名称。所以在这里,将毕达哥拉斯定理想象为a^2 + b^2 = c^2
,我们将使用a
和b
作为局部变量名。但在不同的背景下,另一个名称可能更有意义。例如:
int length = 17;
int areaOfSquare = Square(length);
同样,使用在调用方法的上下文中有意义的名称更有意义。不要在每个上下文中使用相同的名称。