您的系统避免关键字命名冲突是什么?

时间:2009-01-12 20:04:50

标签: language-agnostic naming-conventions keyword

通常,语言具有的关键字无法直接使用完全相同的拼写和大小写,以便在程序中命名(变量,函数,类......)。然而,有时关键字是命名某事的唯一自然选择。您在所选技术中避免/解决此冲突的系统是什么?

16 个答案:

答案 0 :(得分:7)

我通常只是避开这个名字。要么找到不同的名称,要么稍微更改一下 - 例如在C#或Java中clazz而不是class。在C#中你可以使用@前缀,但它太可怕了:

int @int = 5; // Ick!

答案 1 :(得分:5)

关于关键字没有任何本质上无所不包的内容,因为它应该阻止您为变量命名。由于所有名称都只是某种类型的通用实例,因此您可以在抽象中上下移动以找到另一个有用的名称。

例如,如果您编写一个跟踪学生的系统,并且您希望某个对象代表他们在特定领域的学习,即他们已经在某个东西中使用了“类”,如果您不能直接使用该术语,或者复数“类”,或者像“研究”之类的替代,你可能会发现一个更“实例化”的变体:studentClass,currentClass等或更高的视角:“courses”,“courseClass”或specfic类型属性:dailyClass ,nightClass等。

很多选项,你应该只选择最简单,最明显的选择,就是这样。

我总是喜欢倾听用户的谈话,因为他们的语言范围有助于定义问题的范围,通常如果你听得足够长,你会发现他们对相同的基础事物有很多多个术语(只有微妙的差异)。他们通常有答案......

保罗。

答案 2 :(得分:4)

我的系统不使用关键字句号!

如果我有一个函数/变量/类,并且用关键字命名它似乎合乎逻辑,我将在关键字前面使用描述性词语。

(adjectiveNoun)格式。 ie:personName而不是Name,其中“Name”是关键字。

答案 3 :(得分:2)

我只是使用更具描述性的名称。例如,'id'成为标识符,'string'变为'descriptionString',依此类推。

答案 4 :(得分:2)

在Python中,我通常在模块上使用适当的命名空间来避免名称冲突。

import re
re.compile()

而不是:

from re import *
compile()

有时,当我无法避免关键字名称冲突时,我只是将最后一个字母从我的变量名称中删除。

for fil in files:
    pass

答案 5 :(得分:1)

如前所述,要么将类更改为Java / C#中的clazz,要么使用一些下划线作为前缀,例如

int _int = 0;

答案 6 :(得分:1)

没有理由将关键字用作变量名。要么使用更详细的单词,要么使用thesaraus。将单词的某些字母大写,使其与关键字不完全相同,对以后继承代码的人来说无济于事。

答案 7 :(得分:0)

对于那些没有任何关键词的语言感到高兴...

但开玩笑说,我认为在很少的情况下,“但有时一个关键词是命名某事的唯一自然选择。”你可以用“我的”,“做”,“_”或类似的前缀加上相处。

老实说,我真的不能想到许多这样的例子,其中关键字本身就是一个好名字(“int”,“for”和“if”无论如何都是坏的)。可能有意义的C语言家族中唯一的几个是“继续”(使其成为“继续”),“休息”(如何“breakWhenEOFIsreached”或类似的?)和已经提到的“类”(如何关于“classOfThingy” “?)。

换句话说:让名字更合理。 并且永远记住:代码只写了一次,但通常经常阅读。

答案 8 :(得分:0)

通常我会遵循匈牙利表示法。因此,无论出于何种原因,如果我想使用'End'作为整数类型的变量,我会将其声明为'iEnd'。一个字符串将是'strEnd'等。这通常会给变量带来一些空间。

如果我正在开展一个特定的个人项目,其他人只会看看我做了什么,例如,当使用UnrealEngine制作游戏的附加组件时,我可能会在某个地方使用我的姓名缩写名字。也许是'DS_iEnd'。

答案 9 :(得分:0)

我为每种语言编写自己的[vim]语法高亮显示,并且我给所有关键字一个明显的颜色,以便在编码时注意它们。像PHP和Perl这样的语言使用$作为变量,使其成为无问题。

答案 10 :(得分:0)

在Ruby on Rails中开发我有时会查找list of reserved words

答案 11 :(得分:0)

在15年的编程中,我很少遇到这个问题。

我可以立即想到的一个地方,也许是一个css类,在这种情况下,我会使用更具描述性的名称。因此,我可能会使用'targetClass'或类似的东西而不是'class'。

答案 12 :(得分:0)

在python中,普遍接受的方法是附加一个'_'

class -> class_
or -> or_
and -> and_

你可以在operator模块中看到这个例子。

答案 13 :(得分:0)

我切换到一种不限制标识符名称的语言。

答案 14 :(得分:0)

首先,大多数代码约定都会阻止这种情况发生。

如果没有,我通常会添加一个描述性的散文前缀或后缀:

the_class or theClass infix_or (prefix_or(class_param, in_class) , a_class) or_postfix

一种练习,通常与您可以找到的每个代码样式建议保持一致(“长名称不会杀死”,“我保证,”更长的变量名称不会占用更多的内存空间。“) 一般来说,如果您认为关键字是最佳描述,那么稍微差一点就会更好。

请注意,在您的问题的前提下,您会引入歧义,这对读者来说是不利的,无论是编译器还是人类。即使使用class,clazz或klass是自定义的,即使该自定义不是那么自定义它是一个自定义:它需要一个单词,精确描述为单词可能,并扭曲它,有效地射击w0rd的精度“wrd”。有人习惯了另一种w_Rd惯例或语言可能会对你的wolds有一些刺耳的词语。

我们大多数人都比“花”,“众议院”或“汽车”更多地谈论事物,因此通常更多关于typeNames,decoratees,class_params,BaseClasses和typeReferences的说法。

这是我的个人代码混淆容忍度结束的地方:

从不(!!!)依靠范围或神秘的语法规则来防止名称冲突与“关键词”。 (不知道任何允许这样做的编译器,但是,现在,你永远不会知道......)。

尝试一下,有人会在wörd中告诉你__rd,Word会像TeX一样给你!

答案 15 :(得分:-2)

我在Java中的系统是将单词的第二个字母大写,例如:

 int dEfault;
 boolean tRansient;
 Class cLass;