对方法调用和方法签名参数使用相同的变量名称是一种好习惯吗?

时间:2012-01-20 18:36:38

标签: c#

例如:

int a;
int b;

int value = getValue(a,b);


private int getValue(int a, int b)
 {

  int value = a+b;
  return value;

 }

是上述实用或被认为是不好的做法,会在开发后期引起问题。

4 个答案:

答案 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;
}

该方法现在有点清洁,更直观地反映了它的用途。现在我们重新提出问题...是否应重命名ab以匹配方法中的问题?

很可能不是。方法中的名称已更改为指示其上下文。该方法得到两个值的总和,第一个和第二个值。那么ab的背景是什么?他们也只知道第一个和第二个吗?或者他们是否传达了一些其他不易获得的含义?类似的东西:

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);

要使ab具有相同的名称并使用名称n,这是不可能的,甚至没有任何意义。更有意义的是给出在它们被使用的上下文中有意义的参数名称。所以在这里,将毕达哥拉斯定理想象为a^2 + b^2 = c^2,我们将使用ab作为局部变量名。但在不同的背景下,另一个名称可能更有意义。例如:

int length = 17;
int areaOfSquare = Square(length);

同样,使用在调用方法的上下文中有意义的名称更有意义。不要在每个上下文中使用相同的名称。