我注意到,在C#中我使用非常短的变量名称。我的代码被
污染了foreach(var (v|f|i) in SOMETHING)
for(int (i|n|z)=0
var (ret|r) = blah();
...
return ret;
var sw = new StringWriter();
using(var r = cmd.ExecuteNonQuery()) {
while(r.Read()) {
r.GetSomething(3)
我不知道这是坏还是不好。我当然可以读它。我没看过5个月前或更早的代码所以我不能说我是否理解旧代码。我的所有函数都很简短并做一件事,所以通过阅读函数你可以很好地了解变量是什么,特别是因为函数中的函数是<= 5vars。
人们常常大声嚷嚷我没有使用好的变量名。我没有使用好的变量名称或者这样可以吗?
答案 0 :(得分:52)
编写供人阅读的代码。一个好的经验法则是,使用变量的范围越大,其名称应该越具描述性。功能参数尤其应具有非常具有描述性的名称,但功能除外,其中参数的功能很明显,如中所示
double sqrt(double n)
但是,如果通常使用短名称并在小范围内使用,则使用短名称。示例:
//these are okay
var sb = new StringBuilder();
var sw = new StringWriter();
var cmd = new SqlCommand();
for(var i = 0; i< count; i++) {}
答案 1 :(得分:18)
除非你的代码被缩小,否则你不应该在整个地方看到像这样的变种。您的代码 应该毫不费力地理解。
我记得我听说我们所有的代码都应该好像管理我们项目的下一个人是一个知道你住在哪里的精神病患者。
答案 2 :(得分:16)
只要范围有限,就可以使用局部变量的短变量名称。
就个人而言,我发现对于简单的用法,简短的变量名称往往比较长的变量更容易阅读。
using (StreamReader sr = new StreamReader(inputStream))
{
sr.ReadByte();
}
相反:
using (StreamReader streamReader = new StreamReader(inputStream))
{
streamReader.ReadByte();
}
这完全取决于可读性。每种情况都不同,开发团队也不同。如果存在,请遵循项目的编码标准。如果没有,请遵循现有代码库的样式(如果存在)。
我同意这里的一些答案,说变量名称应该有好名字。但我认为,预设对象具有语义值。有时,它没有。在某些情况下,您只需要一个特定对象的实例来执行一些小任务,之后就变得无关紧要了。在这种情况下,我认为缩写标识符是可以接受的。
注意:仅仅因为变量的使用在其范围内受到限制并不一定意味着无意义的名称是可以的。如果有一个好的名称代表对象的作用,那么就应该使用它。如果你能想出一个回答'为什么?'的变量名,那么这个名字就更好了。
此外,开发人员也很好地理解使用“i
”和“j
”来表示for
索引。按照惯例,自FORTRAN时代以来loop counter variables have been named this way。
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
PerformOperation(i,j);
}
}
答案 3 :(得分:8)
几年前,我发现如果我的功能简短会发生什么:
我能理解他们。我的大脑很小,长时间的功能不合适。
课程变得复杂(很多功能)。但Extract Class制作了小型,有凝聚力,单一用途的课程。再次,小脑,所以小班需要。
函数(或类)中的变量数量很少。记住哪个是从申报时间到使用时间很容易,因为距离很短。
我的函数中范围的数量很少,所以我不必弄清哪些变量在哪里。
有了所有这些,我如何命名我的变量并不重要。名称不必弥补难以理解的代码。
由于范围中的变量数量很少,且目的明显,我很少需要付出任何努力来选择描述性名称。因为我不想让我的小脑筋超过我所需要的,我从不缩写。我的变量的默认名称是类型的名称。例如。类Foo
位于变量foo
中。在我的代码中,如果它有不同的东西,你就会知道一些特别的东西正在发生,你应该注意。
在过去,我的无缩写习惯会产生笨重的代码,但由于我的方法和类很小,代码不会受到影响。
答案 4 :(得分:6)
这不仅仅是一个好的变量名称的问题(这是一个好主意),而是如果其他人能够理解你所依据的评论以及变量名称。
当然,对于像计数器或简单操作这样的东西,简短而简洁的名字是有道理的。对于更复杂的算法或更难阅读的内容,您需要详细说明代码清除的程度。
每家商店和每个开发商都不同。在一天结束时,尝试使用考虑编写代码,以便下一个可能需要维护它的人。
答案 5 :(得分:5)
通常认为在循环或短定义的块中使用一个字母变量名称作为索引是正常的。但是,使用描述性的驼峰案例名称可以为读取代码的其他人传达意义,例如函数参数和局部变量。
答案 6 :(得分:5)
除了有限的例外,否 - 这不行。对于单个字母或过度缩写的变量名称,没有任何借口。即使你是一个打猎打字员,智能感知意味着你几乎不需要拼出任何东西。如果您继续以这种方式命名变量,那么任何不幸的任务都会让您自己受到惩罚。
答案 7 :(得分:5)
我会认为这是一种糟糕的编码风格吗?嗯,是的。
如果您在同一代码上与我合作,我会反复提醒您更好地命名您的变量。简而言之,好的代码应该可以被其他开发人员读取而没有太多麻烦,好的变量名称可以帮助很多。即使过了一段时间,也许你在阅读代码时没有遇到任何问题,但问题是,那些从未参与过这项工作的人是否同样对它有好处。
有一些例外,我认为短变量名称是可以的:
索引(主要在for循环中),例如:
for (int i = 0; i < 10; i++)
{
}
在非常有限的范围内使用的变量,例如Linq查询,lambda表达式或者已经提到的一些示例,如Streamwriters和-readers等等,我认为短变量名称很好。
此外,问题始终是代码最终可读性的问题。我不断地唠叨那些使用短变量名的人的原因是,对我而言,这表明他们通常不关心代码的可读性(特别是对于其他代码)。
答案 8 :(得分:3)
当你有这样的变量名时,我不知道如何跟踪事情。
通常,拥有实际描述变量的较长名称要好得多。要争取的是让任何人能够阅读代码并了解最新情况,以便能够理解它们的用途等等。)
答案 9 :(得分:3)
似乎我的变量名称的平均长度每年增加一个我用于编写(更重要的是阅读)代码。
答案 10 :(得分:3)
通过查看几行代码,应该立即清楚任何变量是什么。这可能是由于一个好的变量名或上下文。
关于我使用短变量名的唯一时间是短名称是完全描述性的(即,在处理坐标的情况下是x&amp; y),或者是对数据类型进行操作的效用函数(即,大写)这个字符串的第一个字母。这是一个字符串,你能说什么呢?我把它命名为S.)
答案 11 :(得分:1)
我可能不知道代码中的'r'是什么。此外,变量名称是一回事,但您应该为详细解释注释代码。 注意:这应该是社区维基,因为没有明确的答案。
答案 12 :(得分:1)
这很糟糕。这是不可维护的。
短变量有它们的位置。真的没有理由写 for(int iterator; iterator
经验法则是:每个屏幕达到一个字母。标准的24线屏幕。
例外是选择一两个极常使用的全局变量或半全局变量,如指向数据存储或输入数据指针的指针,并使它们长1-3个字母。但其他任何事情 - 使用理由。短循环 - 一个字母。功能的本地 - 3-5个字母。类变量 - 全字。库类/函数名 - 两个单词。
答案 13 :(得分:0)
我认为没有理由使用简短的变量名称。我们生活在21世纪,我们拥有 IntelliSense (或其他自动完成)的IDE!只需按Ctrl + Space,它会根据变量类型为您的变量建议普通名称,例如。
StringBuilder <Ctrl+Space> stringBuilder;
List<Person> <Ctrl+Space> persons;
比输入sb或其他短名称更容易。没理由再使用短名。
P.S。:我唯一的例外是for循环中的 i,j,k 等计数器。
答案 14 :(得分:0)
我倾向于选择简短的“神秘”变量(符号,在Mathematica中)和描述性评论。
Mathematica已经为内置命令提供了VeryLongFunctionNames,并且添加我自己的代码通常会扩展代码,而不是我关心的代码。
我发现更容易阅读更短的代码块,我可以同时看到所有内容,以及一系列符号描述。