为什么变量名称中没有空格?

时间:2013-12-25 05:48:45

标签: variables programming-languages language-design variable-names

相关:Why can't variable names start with numbers?

是否有技术上的原因,为什么变量名中不允许使用空格,或者它是否符合惯例?

例如,是什么阻止我们做这样的事情?:

average score = sum of scores / number of scores

我想到的唯一问题是关键字,但人们可以简单地限制它们在变量名中的使用,而词法分析器可以区分变量的一部分和关键字。

3 个答案:

答案 0 :(得分:7)

除了语言设计者的决定和单一令牌标识符的历史之外,没有基本的原因。事实上,有些语言确实允许使用多标记标识符:MultiMedia Fusion的表达语言,一些Mac电子表格/笔记本软件的名字让我无法理解,而且我确信其他语言。但是,有几个因素会使问题变得不重要。

假设语言是自由格式的,您需要一个规范表示,这样无论空格如何,account name之类的标识符都被视为相同。编译器可能需要使用一些修改约定来取悦链接器。然后你必须考虑它对外国出口的影响 - 为什么C ++有extern "C"链接说明符来禁用重整。

正如您所见,关键字是一个问题。大多数C族语言都有一个与标识符不同的词汇类关键字,这些关键字不是上下文相关的。您不能在C ++中命名变量class。这可以通过禁止多令牌标识符中的关键字来解决:

if account age < 13 then child account = true;

此处,ifthen不能成为标识符的一部分,因此account agechild 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)。 但是在编码中使用它会更难......