为什么变量名中不允许使用特殊字符?

时间:2014-06-16 18:50:50

标签: programming-languages

为什么在编程语言的变量名中不允许使用特殊字符(下划线除外)? 是否有任何与计算机体系结构或组织相关的原因。

2 个答案:

答案 0 :(得分:3)

大多数语言都有很长的历史,使用ASCII字符集。这些语言往往具有简单的标识符描述(例如,以A-Z开头,后跟A-Z,0-9,可能是下划线; COBOL允许“ - ”作为名称的一部分)。当你所拥有的只是一个029键盘或电传打字机时,你没有很多其他角色,而且大多数都被用作操作员语法或标点符号。

在旧机器上,这确实具有以下优点:您可以将标识符编码为基数37(AZ,0-9,null)[32位中的6个字符]或基数64(AZ,az,0-9,对于小符号表,下划线和空值数字[36位中的6个字符,前几代机器中的常用字大小)。结果是:许多较旧的语言对标识符大小有6个字符限制(例如,FORTRAN)。

LISP语言长期以来更加宽容;名称可以是除LISP特殊含义的字符之外的任何名称,例如,()[]'`#,通常有一些方法可以使用某种转义约定将这些字符插入名称中。我们的PARLANSE语言就像LISP;它使用“〜”作为转义,因此您可以将〜(begin +〜)end 写为单个标识符,其实际拼写为“(开始+结束)”。< / p>

更多现代语言(Java,C#,Scala,....,呃,甚至PARLANSE)在Unicode时代长大,并且倾向于允许标识符中的大多数unicode(实际上,它们倾向于允许命名的Unicode子集作为标识符的一部分)。在这些语言中,由汉字组成的标识符是完全合法的。

它在西半球的品味问题:大多数标识符名称仍然倾向于使用字母和数字(有时,西欧字母)。我不知道日语和中文真正用于标识符名称时具有Unicode功能的字符集;我所看到的小亚洲代码往往遵循西方标识符约定,但注释倾向于使用更多的Unicode字符集。

答案 1 :(得分:-1)

基本上是因为它们主要用作运算符或分隔符,因此会引入歧义。

  

是否有任何与计算机架构或组织有关的理由。

没有。计算机无法看到变量名称。只有编译器才能。但它必须能够区分变量名和由运算符分隔的两个变量名,并且大多数语言设计者采用的原则是计算机程序的含义不应受空白区的影响。