4

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

4

16 回答 16

7

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

int @int = 5; // Ick!
于 2009-01-12T20:08:45.403 回答
5

关键字本质上并没有包罗万象,因为它应该阻止您命名变量。由于所有名称在某种程度上都只是某种类型的概括实例,因此您始终可以在抽象中上下移动以找到另一个有用的名称。

例如,如果您编写了一个跟踪学生的系统,并且您想要一个对象来代表他们在特定领域的学习,即他们在某方面上过“课”,如果您不能直接使用该术语或复数形式“classes”,或类似“studies”的替代词,您可能会发现更“实例化”的变体:studentClass、currentClass 等或更高的视角:“courses”、“courseClass”或特定类型属性:dailyClass、nightClass、等等

很多选项,你应该只喜欢最简单和最明显的一个,仅此而已。

我总是喜欢听用户说话,因为他们的语言范围有助于定义问题的范围,通常如果你听足够长的时间,你会发现他们对相同的底层事物有许多多个术语(只有细微的差别) . 他们通常有答案...

保罗。

于 2009-01-12T20:29:14.630 回答
4

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

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

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

于 2009-01-12T20:14:27.513 回答
2

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

于 2009-01-12T20:15:25.733 回答
2

在 Python 中,我通常在模块上使用正确的命名空间以避免名称冲突。

import re
re.compile()

代替:

from re import *
compile()

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

for fil in files:
    pass
于 2009-01-12T20:19:08.597 回答
1

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

int _int = 0;
于 2009-01-12T20:15:11.100 回答
1

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

于 2009-01-12T20:26:15.197 回答
0

快乐那些没有任何关键字的语言......

但别开玩笑了,我认为在“但有时关键字是命名某事物的唯一自然选择”的情况很少见。你可以通过在它前面加上“my”、“do”、“_”或类似的前缀来相处。

老实说,我真的想不出很多这样的例子,其中关键字本身就是一个好名字(“int”,“for”和“if”无论如何肯定是坏的)。C 语言家族中仅有的几个可能有意义的是“continue”(让它成为“doContinue”)、“break”(“breakWhenEOFIsreached”或类似的东西怎么样?)和已经提到的“class”(“classOfThingy”怎么样? “?)。

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

于 2009-01-12T20:29:44.473 回答
0

通常我遵循匈牙利符号。因此,如果出于某种原因,我想将“End”用作整数类型的变量,我会将其声明为“iEnd”。字符串将是“strEnd”等。这通常给我一些变量的空间。

如果我正在处理一个其他人只会看到我所做的特定个人项目,例如,在使用 UnrealEngine 为游戏制作插件时,我可能会在名称中的某处使用我的首字母。'DS_iEnd' 也许。

于 2009-01-12T20:42:55.647 回答
0

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

于 2009-01-12T21:04:32.733 回答
0

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

于 2009-01-12T21:11:13.920 回答
0

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

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

于 2009-01-12T21:15:35.080 回答
0

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

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

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

于 2009-01-12T21:38:20.417 回答
0

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

于 2009-03-26T15:32:30.203 回答
0

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

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

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

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

请注意,在您提出问题的前提下,您引入了歧义,这对读者不利,无论是编译器还是人类。即使使用 class、clazz 或 klass 是一种习惯,即使这种习惯不习惯以至于它是一种习惯:它需要一个单词 word,尽管单词可能是精确的描述性,然后扭曲它,有效地射击 w0rd 在“wrd”。习惯了另一种 w_Rd 约定或语言的人可能会对您的 wolds 有一些苛刻的字眼。

我们大多数人比“花”、“房子”或“汽车”要说的更多,所以通常有更多关于 typeNames、decoratees、class_params、BaseClasses 和 typeReferences 的说法。

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

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

尝试一下,有人会在 wörd 中与您联系,所以 __rd,Word 对您来说看起来像 TeX!

于 2011-11-09T19:47:38.870 回答
-2

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

 int dEfault;
 boolean tRansient;
 Class cLass;
于 2009-01-12T20:14:39.930 回答