繁体   English   中英

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

[英]What is your system for avoiding keyword naming clashes?

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

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

int @int = 5; // Ick!

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

例如,如果您编写一个跟踪学生的系统,并且您希望某个对象在特定字段中表示他们的学习,即他们在某些内容中使用了“类”,如果您不能直接使用该术语,或者复数“类”或类似“研究”的替代方法,您可能会发现更多“实例化”变体:studentClass,currentClass等或更高的视角:“courses”,“courseClass”或特定类型属性:dailyClass,nightClass,等等

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

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

保罗。

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

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

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

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

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

import re
re.compile()

代替:

from re import *
compile()

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

for fil in files:
    pass

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

int _int = 0;

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

没有任何关键词的语言很开心...

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

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

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

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

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

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

在Ruby on Rails中开发我有时会查找这个保留字列表

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

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

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

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是自定义的,即使该自定义不是那么自定义它是一个自定义:它需要一个单词,精确描述为单词可能,并扭曲它,有效地射击w0rd的精度“wrd”。 有人习惯了另一种w_Rd惯例或语言可能会对你的wolds有一些刺耳的词。

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

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

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

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

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

 int dEfault;
 boolean tRansient;
 Class cLass;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM