如何命名variables

  • 你用什么规则来命名你的variables?
  • 单字母变字在哪里?
  • 你给这个名字写了多less信息?
  • 例如代码呢?
  • 你最喜欢什么毫无意义的variables名? (在foo&bar之后)
  • 他们为什么拼写“foo”和“bar”而不是FUBAR
function startEditing(){ if (user.canEdit(currentDocument)){ editorControl.setEditMode(true); setButtonDown(btnStartEditing); } } 

应该像叙事工作一样阅读。

我总是遵循的一个规则是:如果一个variables编码一些特定单位的值,那么这些单位必须是variables名称的一部分。 例:

 int postalCodeDistanceMiles; decimal reactorCoreTemperatureKelvin; decimal altitudeMsl; int userExperienceWongBakerPainScale 

我不会负责任何火星登陆器(或在我无聊的CRUD业务应用程序中的同等失败)。

那么这一切都取决于你正在开发的语言。因为我目前正在使用C#我倾向于使用以下。

camelCase的variables。

camelCase参数。

PascalCase属性。

m_PascalCase成员variables。

单字母变字在哪里? 我倾向于这样做的循环,但每当我这样做,感到有点内疚。 但用foreach和lambdaexpression式循环现在不是很普遍。

你给这个名字写了多less信息? 如果代码有点难以理解,请发表评论。 不要把variables名变成注释,即。 int theTotalAccountValueIsStoredHere不是必需的。

你最喜欢什么毫无意义的variables名? (在foo&bar之后) i或x。 foo和bar对我来说有点太大学教科书范例了。

他们为什么拼写“foo”和“bar”而不是FUBAR? 传统

这些都是C#约定。

变名的shell

案例表明范围。 Pascalvariables是拥有类的字段。 驼峰variables是当前方法的本地variables。

我只有一个前缀字符约定。 类属性的后台字段为Pascal,并以下划线作为前缀:

 private int _Foo; public int Foo { get { return _Foo; } set { _Foo = value; } } 

有一些我见过的C#variables命名约定 – 我敢肯定,这是一个微软文档 – 反对使用下划线前缀。 这对我来说似乎很疯狂。 如果我看看我的代码,看到类似的东西

 _Foo = GetResult(); 

我自问的第一件事就是,“我是否有充分的理由不使用财产访问者来更新这个领域呢? 答案往往是“是的,你最好知道这是什么,然后开始瞎猜这个代码。”

单字母(和短)variables名称

虽然我倾向于赞同variables名称应该是有意义的说法,但实际上在很多情况下,使得它们的名字有意义并没有增加代码的可读性或可维护性。

循环迭代器和数组索引是使用短variables名和任意variables名的显而易见的地方。 不太明显,但在我的书中不太恰当,是现成的用法,例如:

 XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; XmlWriter xw = XmlWriter.Create(outputStream, xws); 

这是从C#2.0代码; 如果我今天写了,当然,我不需要noncevariables:

 XmlWriter xw = XmlWriter.Create( outputStream, new XmlWriterSettings() { Indent=true; }); 

但是,在C#代码中仍然有很多地方需要创build一个对象,而您只需要将其传递到其他地方,然后扔掉。

在这种情况下,很多开发者会使用像xwsTemp这样的名字。 我发现Temp后缀是多余的。 事实上,我在它的声明中命名variablesxws (我只在该声明的可视范围内使用它;这很重要)告诉我,这是一个临时variables。

另一个地方,我将使用短variables名称在一个方法,使大量使用单个对象。 这是一个生产代码:

  internal void WriteXml(XmlWriter xw) { if (!Active) { return; } xw.WriteStartElement(Row.Table.TableName); xw.WriteAttributeString("ID", Row["ID"].ToString()); xw.WriteAttributeString("RowState", Row.RowState.ToString()); for (int i = 0; i < ColumnManagers.Length; i++) { ColumnManagers[i].Value = Row.ItemArray[i]; xw.WriteElementString(ColumnManagers[i].ColumnName, ColumnManagers[i].ToXmlString()); } ... 

如果我给了XmlWriter一个更长的名字,那么世界上没有办法可以更容易阅读代码(或更安全地修改)。

哦,我怎么知道xw不是一个临时variables? 因为我看不到它的声明。 我只在其声明的4或5行内使用临时variables。 如果我需要一个更多的代码,我可以给它一个有意义的名字,或者将它重构成一个方法 – 嘿,这是一个巧合 – 将短variables作为参数。

你给这个名字写了多less信息?

足够。

这原来是一种黑色艺术。 有很多信息我不需要input名字。 我知道什么时候一个variables的属性访问器的后台字段,或者是临时的,或者是当前方法的一个参数,因为我的命名约定告诉我这一点。 所以我的名字没有。

这就是为什么这不重要。

在实践中,我不需要花费太多精力来计算variables名称。 我把所有的认知工作都放在命名types,属性和方法上。 这比命名variables要重要得多 ,因为这些名字经常在范围内公开(或者至less在整个名字空间中是可见的)。 命名空间中的名字需要以相同的方式传达意义。

这个代码块中只有一个variables:

  RowManager r = (RowManager)sender; // if the settings allow adding a new row, add one if the context row // is the last sibling, and it is now active. if (Settings.AllowAdds && r.IsLastSibling && r.Active) { r.ParentRowManager.AddNewChildRow(r.RecordTypeRow, false); } 

属性名称几乎使评论冗余。 (几乎,实际上有一个原因是为什么这个属性被称为AllowAdds而不是AllowAddingNewRows ,但是它并不适用于这个特殊的代码,这就是为什么有一个注释。)variables名? 谁在乎?

几乎每一种广泛使用的现代语言都有自己的编码标准。 这是一个很好的起点。 如果一切都失败了,只要使用推荐的。 当然也有例外,但是这些都是一般的指导方针。 如果你的团队喜欢某些变化,只要你同意他们,那也没问题。

但是在一天结束的时候,这不一定是你使用的标准,而是你有他们的事实,他们是坚持的。

  • 我只使用单字符variables进行循环控制或使用非常短的函数。
 for(int i = 0; i< endPoint; i++) {...} int max( int a, int b) { if (a > b) return a; return b; } 
  • 信息的数量取决于variables的范围,可以使用的地方越多,我想知道更多的信息来追踪它的目的。
  • 当我编写示例代码时,我尝试按照真实代码的方式使用variables名称(尽pipe函数可能会得到像foo或bar这样的无用名称)。
  • 请参阅“Foo”的词源

你用什么规则来命名你的variables?

通常,由于我是C#开发人员,因此我遵循由IDesign C#Coding Standard指定的variables命名约定,原因有两个

1)我喜欢它,并且很容易阅读。 2)这是我现在使用的广泛使用的Visual Studio 2005/2008的Code Style Enforcer AddIn的默认设置。

单字母变字在哪里?

有几个地方我会允许单字母variables。 通常这些是简单的循环索引器,或者像X,Y,Z坐标那样的math概念。 除此之外,从来没有! (到处都是我用过的,重读代码的时候我都被他们咬了)。

你给这个名字写了多less信息?

足以知道variables正被用于什么。 如罗伯特·马丁所说:

variables,函数或类的名称应该回答所有大问题。 它应该告诉你为什么存在,它做了什么,以及如何使用它。 如果一个名字需要评论,那么这个名字不会显示它的意图。 从清洁代码 – 敏捷软件工艺手册

我从不使用像foo或bar这样毫无意义的variables名,当然,除非代码真的被丢弃了。

对于循环variables,我将字母加倍,以便在文件中searchvariables更容易。 例如,

 for (int ii=0; ii < array.length; ii++) { int element = array[ii]; printf("%d", element); } 

你用什么规则来命名你的variables? 我在单词(load_vars),骆驼套(loadVars)和没有空格(loadvars)之间的下划线之间切换。 类始终是CamelCase,大写。

单字母变字在哪里? 大部分是循环的。 一次性代码中的临时variables。

你给这个名字写了多less信息? 足以提醒我编码时的情况。 (是的,以后可能会导致问题!)

你最喜欢什么毫无意义的variables名? (在foo&bar之后) temp,res,r。 我其实不使用foo,而是一个很好的数字。

你用什么规则来命名你的variables?

  • 我需要在一年的时间内了解它。 还应该符合预先存在的风格。

单字母变字在哪里?

  • 超显而易见的东西。 如char c; c = getc(); 循环指示(i,j,k)。

你给这个名字写了多less信息?

  • 很多很多。

例如代码呢?

  • 同上。

你最喜欢什么毫无意义的variables名? (在foo&bar之后)

  • 我不喜欢有无意义的variables名称。 如果一个variables没有任何意义,为什么在我的代码?

他们为什么拼写“foo”和“bar”而不是FUBAR

  • 传统。

我坚持的规则是;

名称是否完全准确地描述variables代表什么?

名称是指现实世界问题而不是编程语言解决scheme?

这个名字够长吗,你不必把它搞糊涂?

在名称末尾是否有计算值限定符?

他们是否只在需要的时候特别实例化?

你用什么规则来命名你的variables? 所有重要variables的驼峰,所有类的驼峰

单字母变字在哪里? 在循环结构和math函数中,单字母var名称与math定义一致。

你给这个名字写了多less信息? 你应该能够像书一样阅读代码。 函数名称应该告诉你函数做了什么(scalarProd(),addCustomer()等)

例如代码如何?

你最喜欢什么毫无意义的variables名? (foo&bar之后) temp,tmp,input,我从来没有真正用过foo和bar。

我想说尽可能清楚地命名它们。 切勿使用单个字母variables,只使用“foo”和“bar”(如果只是testing某些内容(例如,以交互模式)并且不会在生产中使用它)。

我喜欢在我的variables前面加上前缀:str = String,int = Integer,bool = Boolean等

使用单个字母在循环中快速简单:对于i = 0到4 …循环

variables被做成一个简短但描述性的替代你正在使用的东西。 如果variables太短,你可能不知道它是什么。 如果太长,你将永远打一个代表5的variables。

例如代码使用Foo&Bar来显示代码的工作方式。 您可以使用任何不同的无意义字符来代替。 我通常只使用i,x,&y。

我个人对foo酒吧和fu酒吧的看法是,这太明显了,没有人喜欢2字符variables,3更好!

在DSL和其他stream利的接口中,variables名和方法名通常构成一个词汇实体。 例如,我个人喜欢将动词放在variables名称(而不是方法名称)中的(公认的异端)命名模式。 参见第六条variables命名规则

另外,我喜欢使用$作为一个代码片段的主variables的variables名称。 例如,一个可以打印树结构的类可以使用$作为StringBuffer的instvariables。 @see 这是详细的!

否则,我会参考Einar Hoest编程人员的短语手册。 @see http://www.nr.no/~einarwh/phrasebook/

我总是在for循环中使用单个字母variables,它只是更好看,更容易阅读。

这很大程度上取决于你正在编程的语言,在C ++中我没有像在Java中那样将variables命名为相同的名称(Java使得它本身对于过长的variables名称imo更好,但这可能只是个人偏好。或者,它可能与Java内置命名如何命名有关…)。

当地人:fooBar; 成员/types/函数FooBar接口:IFooBar

至于我,只有名字是经典的,单个字母才是有效的。 i / j / k仅用于本地循环索引,x,y,z表示vector部分。

变种的名字传达的意义,但足够短,不包装线

foo,bar, baz 。 泡菜也是最喜欢的。

我学会了不要在VB3中使用单字母variables名称。 问题是,如果你想在任何地方search一个variables,使用单个字母很难。

新版本的Visual Studio具有智能variablessearchfunction,可以避免这个问题,但是老习惯等等。 无论如何,我更喜欢在荒谬的一面犯错。

 for (int firstStageRocketEngineIndex = 0; firstStageRocketEngineIndex < firstStageRocketEngines.Length; firstStageRocketEngineIndex++) { firstStageRocketEngines[firstStageRocketEngineIndex].Ignite(); Thread.Sleep(100); // Don't start them all at once. That would be bad. } 

如何命名variables几乎是不重要的。 除了由语言指定的规则之外,您确实不需要任何规则,或者至less需要由编译器执行的规则。

select你认为你的队友所能想到的名字被认为是有礼貌的,但是风格规则并没有像人们想象的那样真正起作用。

由于我作为承包商工作,在不同的公司和项目之间移动,我更喜欢避免自定义命名约定。 这使得新开发人员或维护开发人员更难以熟悉(并遵循)正在使用的标准。

所以,虽然人们可以在其中find不同意的观点,但我期待着官方的微软networking(Microsoft Net)的指导方针,以获得一致的命名约定。

除了一些例外(匈牙利符号),我认为一致的使用可能比任何一套任意的规则更有用。 也就是说,每次都这样做。

更新

首先,命名取决于现有的惯例,无论是从语言,框架,图书馆还是项目。 (当在罗马…)例如:使用jQuery风格的jQuery插件,使用苹果风格的iOS应用程序。 前面的例子需要更多的警惕(因为JavaScript会变得混乱,不会自动检查),而后面的例子更简单,因为这个标准已经被很好的执行和遵循了。 YMMV取决于领导者,社区,尤其是工具。

我将把我所有的命名习惯放在一边,遵循现有的惯例。


一般来说,我遵循这些原则,所有以编程为中心的原则都是通过书面语言的另一种人际沟通forms。

  • 可读性 – 重要的部分应该有固定的名字; 但是这些名字不能代替正确的意图文件。 代码可读性的testing是,如果你可以在几个月后回来,仍然有足够的理解,不要在第一印象时抛弃整个事情。 这意味着避免缩写; 看匈牙利符号的情况 。

  • 可写性 – 公共区域和样板应该保持简单(尤其是如果没有IDE),所以编写代码更容易,更有趣。 这是Rob Robke风格的启发。

  • 可维护性 – 如果我像arrItems那样将types添加到我的名字中,那么如果我将该属性更改为扩展ArrayCustomSet类的实例,就会arrItems 。 types注释应该保存在文档中,并且只在适当的情况下(对于API等)。

  • 标准通用命名 – 对于愚蠢的环境(文本编辑器):类应该在ProperCase ,variables应该是短的,如果需要的话可以在snake_case ,函数应该在camelCase


对于JavaScript,这是一个经典的语言限制和影响命名的工具。 它有助于通过不同的命名区分variables和函数,因为没有IDE来握住你的手,而this prototype和其他样板掩盖了你的视野,并混淆了你的分化技能。 在一个范围内看到所有不重要的或全球派生的variables都是缩写。 该语言没有import [path] as [alias]; ,所以本地瓦尔变成别名。 然后是一系列不同的空格式约定。 这里唯一的解决scheme(以及任何地方)都是正确的文档(和标识)。

此外,语言本身是基于function级别的范围和闭包,所以大量的灵活性可以使variables在2+范围级别的块感到非常混乱,所以我已经看到命名的范围链中每个级别的前缀_到那个范围的变数。

  1. 使用描述清楚它包含的variables。 如果class级变大,或者在公共范围内,variables名称需要更准确地描述。 当然,好的命名使得你和其他人更好地理解代码。
    • 例如:使用“employeeNumber”而不是“数字”。
    • 使用Btn或Button在variables名称的末尾重新button。
  2. 以小写开始variables,以大写开始类。
    • 类“MyBigClass”的示例,variables“myStringVariable”的示例
  3. 使用大写字母来表示一个新的单词以提高可读性。 不要使用“_”,因为它看起来丑陋,需要更长的时间来写。
    • 例如:使用“employeeName”。
  4. 只能在循环中使用单个字符variables。

我在MathCAD工作,我很高兴,因为MathCAD给了我不断增加的命名可能性,我使用它们很多。 如果没有这个,我就不会理解如何编程。 为了区分一个变种,我必须在名称中包含很多信息,例如:

1.首先 – 数量为-N,F为力量等

2.第二个附加指标 – 例如武力方向

3.在向量或matrixvar内的第三个索引中,为了方便起见,我把var名称放在{}或[]括号中以显示其维度。

所以,作为结论,我的var名称就像N.dirs / Fx i.row / {F} .w。(i,jk)/ {F} .w。(k,ij)。 有时我必须为vector值{F}。{GCS} .w。(i,jk)/ {F}。{LCS} .w。(i,jk)添加坐标系名称。

最后一步,在外部函数的末尾添加外部模块的名字,或者像Row.MTX.f([M])那样添加var,因为MathCAD没有函数的帮助string。

现在我做了很多的PHP,虽然并不总是这样,但是在variables命名方面,我学到了一些技巧。

//这是我的stringvariables$ strVar =“”;

//这将代表一个数组$ arrCards = array();

//这是一个整数$ intTotal = NULL:

// object $ objDB = new database_class();

//布尔值$ blValid = true;