Vol*_*ity 7 variables programming-languages language-design variable-names
是否存在技术上的原因,为什么变量名称中不允许使用空格或者是否符合惯例?
例如,是什么阻止我们做这样的事情?:
average score = sum of scores / number of scores
Run Code Online (Sandbox Code Playgroud)
想到的唯一问题是关键字,但可以简单地限制它们在变量名中的使用,而词法分析器将能够区分变量的一部分和关键字.
除了语言设计者的决定和单一令牌标识符的历史之外,没有根本原因.事实上,有些语言允许使用多标记标识符:MultiMedia Fusion的表达语言,一些Mac电子表格/笔记本软件,其名称让我感到厌烦,而且我确信其他语言.但是,有几个因素会使问题变得不重要.
假设语言是自由格式的,则需要规范表示,以便account name无论空格如何,标识符都被视为相同.编译器可能需要使用一些修改约定来取悦链接器.然后你必须考虑它对外国出口的影响 - 为什么C++有extern "C"链接说明符来禁用重整.
正如您所见,关键字是一个问题.大多数C族语言都有一个与标识符不同的词汇类关键字,这些关键字不是上下文相关的.您不能class在C++中命名变量.这可以通过禁用多令牌标识符中的关键字来解决:
if account age < 13 then child account = true;
Run Code Online (Sandbox Code Playgroud)
在这里,if并且then不能成为标识符的一部分,因此没有歧义account age和child account.或者,您可以在任何地方要求标点符号:
if (account age < 13) {
child account = true;
}
Run Code Online (Sandbox Code Playgroud)
最后一个选项是使关键字普遍具有上下文敏感性,从而产生如下怪物:
IF IF = THEN THEN ELSE = THEN ELSE THEN = ELSE
Run Code Online (Sandbox Code Playgroud)
最大的问题是并置是一个非常强大的句法结构,你不想轻易占据它.允许多标记标识符可防止将并置用于其他目的,例如函数应用程序或组合.我认为,更好的是允许大多数非空白字符,从而允许这样的标识符canonical-venomous-frobnicator.仍然有很多可读性,但模糊性的机会较少.