14 c# language-agnostic variables coding-style
我注意到,在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)
Run Code Online (Sandbox Code Playgroud)
我不知道这是坏还是不好.我当然可以读它.我没看过5个月前或更早的代码所以我不能说我是否理解旧代码.我的所有函数都很简短并且做了一件事,所以通过阅读函数可以很好地了解变量是什么,特别是因为函数中的函数是<= 5vars.
人们常常大吼大叫我没有使用好的变量名.我没有使用好的变量名称或者这样可以吗?
dan*_*dan 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++) {}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ell 16
只要范围有限,就可以使用局部变量的短变量名称.
就个人而言,我发现对于简单的用法,简短的变量名称往往比较长的变量名称更容易阅读.
using (StreamReader sr = new StreamReader(inputStream))
{
sr.ReadByte();
}
Run Code Online (Sandbox Code Playgroud)
相反:
using (StreamReader streamReader = new StreamReader(inputStream))
{
streamReader.ReadByte();
}
Run Code Online (Sandbox Code Playgroud)
这完全取决于可读性.每种情况都不同,开发团队也不同.如果存在,请遵循项目的编码标准.如果不存在,请遵循现有代码库的样式(如果存在).
我同意这里的一些答案,说变量名称应该有好名字.但我认为这预先假定一个对象具有语义价值.有时,它没有.在某些情况下,您只需要一个特定对象的实例来执行一些小任务,之后就变得无关紧要了.在这种情况下,我认为缩写标识符是可以接受的.
注意: 仅仅因为变量的使用在其范围内受到限制并不一定意味着无意义的名称是可以的.如果有一个好的名称代表对象的作用,那么就应该使用它.如果你能想出一个回答'为什么?'的变量名,那么这个名字就更好了.
此外,开发人员很好地理解使用' i'和' j'作为for索引.按照惯例,自FORTRAN时代以来,循环计数器变量就这样命名.
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
PerformOperation(i,j);
}
}
Run Code Online (Sandbox Code Playgroud)
几年前,我发现如果我的功能简短,会发生什么:
我能理解他们.我的大脑很小,很长的功能都不合适.
类变得复杂(许多函数).但Extract Class制作了小型,有凝聚力,单一用途的课程.再次,小脑,需要小班.
函数(或类)中的变量数量很少.记住哪个是从申报时间到使用时间很容易,因为距离很短.
我的函数中的作用域数量很少,所以我不必弄清哪些变量在哪里.
有了所有这些,我如何命名我的变量并不重要.名称不必弥补其他难以理解的代码.
由于范围中的变量数量很少,而且目的很明显,因此我很少需要付出任何努力来选择描述性名称.因为我不想让我的小脑筋比我更大,我从不缩写.我的变量的默认名称是类型的名称.例如,班级Foo变量foo.在我的代码中,如果它有不同的东西,你就会知道一些特别的东西正在发生,你应该注意.
在过去,我的无缩写习惯会产生笨重的代码,但由于我的方法和类很小,代码不会受到影响.
这不仅仅是一个好的变量名称的问题(这是一个好主意),而是如果其他人可以理解你依赖于评论和变量名称所写的内容.
当然,对于像计数器或简单操作这样的东西,简短而简洁的名字是有道理的.对于更复杂的算法或有点难以阅读的内容,您需要详细说明代码是否清晰.
每个商店和每个开发商都是不同的.在一天结束时,尝试编写代码,考虑下一个可能需要维护它的人.
除了有限的例外,没有 - 这不行.对于单个字母或过度缩写的变量名称,没有任何借口.即使你是一个打猎打字员,智能感知意味着你几乎不需要拼出任何东西.如果你继续以这种方式命名变量,那么你自己就要惩罚任何不幸的任务,以维护你的代码.
我会认为这是一种糟糕的编码风格吗?嗯,是.
如果您在同一代码上与我合作,我会反复提醒您更好地命名您的变量.简而言之,好的代码应该可以被其他开发人员读取而没有太多麻烦,好的变量名称可以帮助很多.即使过了一段时间,也许你在阅读代码时没有遇到任何问题,但问题是,那些从未参与过这项工作的人是否同样对它有好处.
有一些例外,我认为短变量名称是可以的:
索引(主要在for循环中),例如:
for (int i = 0; i < 10; i++)
{
}
Run Code Online (Sandbox Code Playgroud)
在非常有限的范围内使用的变量,例如Linq查询,lambda表达式或者已经提到过的一些示例,如Streamwriters和-readers等,这是我认为短变量名称很好的另一个例子.
此外,它始终是一个代码最终可读性的问题.我不断地唠叨那些使用短变量名的人的原因是,对我来说,这是一个指示,他们通常不关心他们的代码是多么可读(特别是对于其他人).