相关:Why can't variable names start with numbers?
是否有技术上的原因,为什么变量名中不允许使用空格,或者它是否符合惯例?
例如,是什么阻止我们做这样的事情?:
average score = sum of scores / number of scores
我想到的唯一问题是关键字,但人们可以简单地限制它们在变量名中的使用,而词法分析器可以区分变量的一部分和关键字。
答案 0 :(得分:7)
除了语言设计者的决定和单一令牌标识符的历史之外,没有基本的原因。事实上,有些语言确实允许使用多标记标识符:MultiMedia Fusion的表达语言,一些Mac电子表格/笔记本软件的名字让我无法理解,而且我确信其他语言。但是,有几个因素会使问题变得不重要。
假设语言是自由格式的,您需要一个规范表示,这样无论空格如何,account name
之类的标识符都被视为相同。编译器可能需要使用一些修改约定来取悦链接器。然后你必须考虑它对外国出口的影响 - 为什么C ++有extern "C"
链接说明符来禁用重整。
正如您所见,关键字是一个问题。大多数C族语言都有一个与标识符不同的词汇类关键字,这些关键字不是上下文相关的。您不能在C ++中命名变量class
。这可以通过禁止多令牌标识符中的关键字来解决:
if account age < 13 then child account = true;
此处,if
和then
不能成为标识符的一部分,因此account age
和child account
不存在歧义。或者,您可以在任何地方要求标点符号:
if (account age < 13) {
child account = true;
}
最后一个选项是让关键字普遍具有上下文敏感性,导致如下怪诞:
IF IF = THEN THEN ELSE = THEN ELSE THEN = ELSE
最大的问题是并置是一种非常强大的句法结构,你不想轻易占据它。允许多标记标识符可防止将并置用于其他目的,例如函数应用程序或组合。我认为,更好的是允许大多数非空白字符,从而允许使用canonical-venomous-frobnicator
这样的标识符。仍然有很多可读性,但模糊性的机会较少。
答案 1 :(得分:0)
我认为这是因为语言的设计者遵循了这个惯例。
我在Google上搜索过,发现在命名变量时,这是一个在命名变量时遵循的规则。
下面给出了一些链接: -
以下规则适用于变量名称:
- 变量名称不能包含空格。
变量名称区分大小写。变量的名称可以是任何合法的 identifier - 无限长度的Unicode字母和序列 数字,以字母开头,美元符号“$”或者 下划线字符“”。然而,该公约始终是开始的 您的变量名称带有字母,而不是“$”或“”。另外, 按照惯例,美元符号字符从未使用过。你可以 找到一些自动生成的名称将包含的情况 美元符号,但您的变量名应始终避免使用它。一个 对于下划线字符存在类似的约定;虽然它是 在技术上合法,用“_”开始变量的名称,这个 不鼓励练习。 不允许有空格。
在上述所有链接中,您会发现设计人员已遵循此命名约定来命名变量。
同时检查Is there any language that allows spaces in its variable names
答案 2 :(得分:0)
这是语言设计的迫使。 编译器需要找出单词的含义。 编译器使用“状态机”方法,它需要区分关键字。 也许在“[”和“]”中放置变量名称可以给我们一些解决方案(比如SQL)。 但是在编码中使用它会更难......