Language agnostic 您的系统是如何避免关键字命名冲突的?

Language agnostic 您的系统是如何避免关键字命名冲突的?,language-agnostic,naming-conventions,keyword,Language Agnostic,Naming Conventions,Keyword,通常,语言中的关键字不能直接使用与程序中的命名内容(变量、函数、类等)完全相同的拼写和大小写。然而,有时关键字是命名事物的唯一自然选择。在您选择的技术中,为了避免/避免这种冲突,您的系统是什么?通常,我只是避免使用名称。找到一个不同的名称或稍微更改它-例如,在C#或Java中使用clazz而不是class。在C#中,可以使用@前缀,但这很可怕: int @int = 5; // Ick! 我的系统是不使用关键字期间 如果我有一个函数/变量/类,用一个关键字来命名它似乎合乎逻辑,那么我会在关键字

通常,语言中的关键字不能直接使用与程序中的命名内容(变量、函数、类等)完全相同的拼写和大小写。然而,有时关键字是命名事物的唯一自然选择。在您选择的技术中,为了避免/避免这种冲突,您的系统是什么?

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

int @int = 5; // Ick!

我的系统是不使用关键字期间

如果我有一个函数/变量/类,用一个关键字来命名它似乎合乎逻辑,那么我会在关键字前面使用一个描述性单词


(形容词名词)格式。ie:personName而不是Name,其中“Name”是一个关键字。

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

 int dEfault;
 boolean tRansient;
 Class cLass;

如前所述,在Java/C#中将class更改为clazz,或者使用一些下划线作为前缀,例如

int _int = 0;

我只是用了一个更具描述性的名字。例如,“id”变成标识符,“string”变成“descriptionString”,等等。

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

import re
re.compile()
而不是:

from re import *
compile()
有时,当我无法避免关键字名称冲突时,我只需删除变量名称的最后一个字母

for fil in files:
    pass

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

关键字本身并没有什么包罗万象的地方,因为它会阻止你命名变量。由于所有名称在某种程度上都只是某种类型的通用实例,因此您可以在抽象中上下移动以找到另一个有用的名称

例如,如果你编写了一个跟踪学生的系统,并且你想要一个对象来代表他们在某个特定领域的学习,例如,他们在某个领域参加了“课程”,如果你不能直接使用这个术语,或复数“类”,或类似“研究”的替代词,你可能会发现一个更“实例化”的变体:studentClass,currentClass,或更高的视角:“课程”、“课程课堂”或特定类型属性:dailyClass、nightClass等

有很多选择,你应该选择最简单、最明显的一个,仅此而已

我总是喜欢听用户说话,因为他们的语言范围有助于确定问题的范围,如果你听的时间足够长,你会发现他们对相同的基本内容有许多不同的术语(只有细微的差别)。他们通常有答案


保罗

有一种没有任何关键字的语言的人很高兴

但除了开玩笑,我认为在很少的情况下,“但有时关键字是命名某物的唯一自然选择。”你可以在它前面加上“我的”、“做”、“_uu”或类似的前缀

老实说,我真的想不出有多少这样的例子,仅仅用关键字就可以得到一个好名字(“int”、“for”和“if”无论如何都肯定是不好的)。C语言家族中唯一有意义的是“continue”(使其成为“doContinue”)、“break”(如何称为“breakwheeofithead”或类似的词?)和已经提到的“class”(如何称为“classOfThingy”?)

换句话说:让名字更合理。
请永远记住:代码只编写一次,但通常阅读次数非常多。

我通常使用匈牙利符号。所以,无论出于什么原因,如果我想使用'End'作为integer类型的变量,我会将其声明为'iEnd'。字符串应该是“strengd”,等等。这通常会给我一些空间,直到变量变为止


如果我在做一个特定的个人项目,而其他人只会看到我做了什么,例如,在使用UnrealEngine为游戏制作附加组件时,我可能会在名字的某个地方使用我的首字母缩写。”也许是吧。

我为每种语言编写了自己的[vim]语法高亮,我给所有关键词加上明显的颜色,以便在编码时注意到它们。像PHP和Perl这样的语言对变量使用
$
,这是不成问题的。

在Ruby on Rails中开发时,我有时会发现这个问题。

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


我能马上想到的一个地方可能是css类,在这种情况下,我会使用更具描述性的名称。因此,我可以使用“targetClass”或类似的东西来代替“class”。

在python中,普遍接受的方法是附加一个“\ux”

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

您可以在模块中看到这一点。

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

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

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

the_class or theClass infix_or (prefix_or(class_param, in_class) , a_class) or_postfix
这是一种实践,通常与您可以找到的每一个代码风格的建议都是一致的(“长名称不会导致死亡”,“长变量名称不会占用更多内存空间,我保证”) 一般来说,如果你认为关键词是最好的描述,稍微差一点的描述会更好

请注意,在你的问题的前提下,你引入了歧义,这对读者是有害的,无论是编译器还是人类。即使使用class、clazz或klass是一种习惯,即使这种习惯不是那么习惯,它也是一种习惯:它接受一个单词,精确地描述这个单词,并对其进行扭曲,有效地在“wrd”中射击w0rd的精度。习惯于另一种世界惯例或语言的人可能会对你的世界说一些刺耳的话

我们中的大多数人都有比“花”、“房子”或“车”更多的话要说,所以通常有更多关于类型名、装饰物、类参数、基类和类型引用的话要说

这是