语言不区分大小写的关键字[关闭]


31

我们正在尝试编写自定义脚本语言。有人建议通过提供不区分大小写的关键字来使语言宽容。

我个人不喜欢这个主意,但是我的团队中很少有人倾向于这个主意,说它将使最终用户满意!给出了诸如FORTRAN,BASIC,SQL之类的语言示例,称它们不区分大小写。

这是一个好主意吗?


4
好吧,Visual Basic通常不区分大小写,这可以回答您的问题吗?; P
yannis 2012年


3
请注意,除非您将用户限制为ASCII字符集,否则很难使标识符区分大小写。
Simon Richter 2012年

2
@MainMa:C ++至少不是直接的。它允许在标识符中实现定义的字符,但是只能保证a-zA-Z0-9(开头除外)和_
Xeo 2012年

2
VB6实际上使用一种混合方法:您可以按任何需要的方式编写关键字和标识符,IDE会立即将它们转换为存储方式。(您甚至可以编写“ endif”,它将转换为“ End If”。)
Felix Dombek 2012年

Answers:


42

问问自己最终用户是谁。如果要由具有C或Javscript编程经验或Unix的IT经验的人编写,那么区分大小写可能是正确的选择,因为这是用户的期望。但是对于大多数最终用户,甚至是高级用户,这将造成混乱。

VB / VBA / VBScript不区分大小写,这是为了使非程序员可以轻松掌握该语言的决定。Excel公式(不完全是脚本,而是尽可能多的用户)不区分大小写。在大多数写作中,大小写的选择可以使文本看起来或多或少显得专业和优美,但大小写本身不会改变单词的语义。这就是为什么我认为非开发人员会对区分大小写的脚本语言感到困惑。

同样,这不是技术选择。这是产品管理的选择,必须由对目标受众非常了解的人员做出。


在查看编程语言之前,请考虑哪些文件系统区分大小写。Windows的FAT / NTFS和MacOS X的HFS +都不区分大小写,而Unix的UFS / NFS区分大小写。高级用户喜欢通过微小差异来区分文件/变量的能力,而大多数用户则希望保持事物的直观性。正如Avner所说,差异是产品管理的选择。
Michael Shopsin 2012年

4
由于它是一种脚本语言,因此很容易-不区分大小写是解决方法。为什么要区分大小写?如果答案是“像C和Java一样”,那真的是一个很好的理由吗?

15
@Ben Python,Ruby,bash,Lua和Perl是区分大小写的非常流行的脚本语言的示例。不区分大小写的语言包括企业语言,例如Delphi和SQL(以及COBOL IIRC,如果您将其计算在内)。为什么对脚本语言毫无疑问,为什么世界上最大的脚本语言的设计者不同意?

2
由于是一种脚本语言,所以这不是一件容易的事-相关的问题是:谁在执行脚本,什么是他们的最佳选择?(我也要说,您可能应该保持一致:如果您的关键字不区分大小写,不要使标识符区分大小写...)
即将

@delnan我认为针对内置了区分大小写的OS的脚本语言也应该区分大小写是一种逻辑选择。
Artemix 2012年

16

您应该根据想要呈现的用户体验来决定,而不是要实现起来多么容易或困难。

如果这将使您的用户更容易实现不区分大小写的功能,那么这就是您应该实现的。

举例来说,SQL不区分大小写。这使得在交互式设置中非常容易使用。

看看这另一种方式是-还能有之间的差异keywordKeyword你的语言,并将这种差异是对用户有意义?对于脚本语言,我会说答案是“否”。


3
+1表示“这种差异对用户有意义”。用户最重要。
2012年

由于大小写不敏感,为什么在交互设置中更易于使用SQL?是因为您可能会意外打开Caps Lock而不注意吗?
卡兹(Kaz)2012年

@Kaz-差不多。
克里斯·

11

编程语言应区分大小写。人们可以很容易地对此进行调整:他们只需要记住大部分工作都使用小写字母,并且要注意现有API中的大小写混合或全大写的标识符。

曾经使语言不区分大小写似乎是显而易见的。这是因为小写字母并非在所有计算系统及其I / O设备(键盘,打印机和显示设备)上都可用。编程语言实现必须接受以大写形式编写的程序,因为只有这样才能显示或打印。为此,它们必须不区分大小写,因为接受大写同时区分大小写意味着拒绝小写。小写是程序员想要的,但并非总是如此。没有人真正想使用大写的程序。这只是硬件限制。

有一阵子,甚至在终端上折叠箱子也是很普遍的。如果终端只能显示大写字母,但是您必须登录到支持大写和小写字母的计算系统,则终端会将小写字母折叠为大写字母。认为这是很久以前的事了吗?“与Apple II一样,Apple II Plus也没有小写功能。” (http://zh.wikipedia.org/wiki/Apple_II_Plus)当早期Apple计算机的用户拨入包含大小写混合的BBS时,终端仿真器(或主机)必须将其全部折叠为大写。当时,所有大写字母的消息在公告板上都很常见。在类似Unix的操作系统(如Linux内核)中仍然可以找到此功能。例如,键入stty olcuc在shell提示符下。Unix tty行规程可以将小写字母映射到输出的大写,也可以将大写字母映射到输入的小写。这使您可以在没有小写字母的终端上以小写字母的编程语言进行工作。

不区分大小写是过去的计算机时代的过时概念,在现代国际化计算世界中效果不佳。您是否将其扩展到其他语言?法语呢:您认为È和è等效吗?还是日语?您是否认为平假名和片假名只是案例,以便ファイル和ふぁいる是相同的标识符?对这种愚蠢的支持将使您的词法分析器大大复杂化,后者必须具有整个Unicode空间的大小写对等映射。

请注意,数学区分大小写。例如,大写的sigma可能表示求和,而小写的sigma则表示其他东西,例如标准差。这可以在相同的公式中发生而不会造成任何困难。(编程语言会使Σ和σ等效吗?)

英语拼字法很敏感。例如,许多专有名词对应于普通名词甚至其他词性。“ may”是动词,但“ May”是一个月或女人的名字。而且,如果首字母缩写词或缩写词用小写写,可能会造成混淆。SAT代表学业能力测验,而“ sat”是“ sit”的过去分词。聪明的人会注意细节并适当利用资本。

基本上,自1985年以来创建的任何不区分大小写的新编程语言都适用于那些仍然在电子邮件和帖子中大声疾呼而又没有第二次思考的人。

如果您的语言曾经被用作代码生成目标来翻译另一种语言的代码,并且该另一种语言区分大小写怎么办?您将必须以某种方式转换所有名称以捕获区别。(因此断言这不是技术决定,而仅取决于目标受众的情感偏好是可笑的。)

当文件从另一个操作系统导入时,请查看由Windows中的案例处理引起的烦人问题。那是一个技术问题。区分大小写的文件系统的外部数据有问题,不区分大小写的文件系统没有。

Common Lisp碰到了一种理想的方法:符号名区分大小写,但是当读取令牌时,它们会折叠为大写。这意味着令牌foofOOFOO并且Foo都表示同一符号:他的名字被存储为字符串的符号"FOO"。此外,此行为只是默认的读取表配置。读者可以将字母折叠为大写,小写,反转大小写或保存。最后两个选择引起区分大小写的方言。这样,用户将具有最大的灵活性。


1
“法语呢:您认为È和è等价吗?还是日语?您是否认为平假名和片假名只是大小写,以便ファイル和ふぁいる是相同的标识符?” 答案是“是”,如果您认为别人的文化是愚蠢的,那是愚蠢的。
2012年

好吧,为你的小脑袋爆炸做准备,因为我认为其他人的文化不是愚蠢的(在某些特定情况下,就世界时事而言),但与此同时,我认为对待ファイル和programmingいる作为编程语言中的相同标识符。
卡兹(Kaz)2012年

@本,你知道提到的文化吗?如果您知道Kaz在说什么,您就不会称呼他为愚蠢。
大卫·考登

1
@DavidCowden,我从来没有说过Kaz愚蠢。我同意,只要使用标识符,就应该始终使用相同的情况。假名差异比大小写差异更重要,就像重音差异比大小写差异更重要一样。然而,就像具有两个仅因情况而不同的标识符是愚蠢的一样,具有两个仅因假名或口音而不同的标识符也是愚蠢的。禁止仅以假名或重音符号区分的标识符比将其视为相同的标识符更有意义,但是将它们视为不同的标识符几乎没有任何意义。
2012年

如果您禁止仅在大小写,重音符号或假名或其他名称上有所不同的标识符,那么您就隐含地承认它们是相同的(但仅坚持一致性)。最好不要放任这些东西,而让他们留给用户看,这是编码约定的问题。更好的主意是拥有一个声明式系统,程序可以声明该系统,foo并将Foo其视为同义词或区别对待。如果没有这样的声明,则两者都发生是错误的。并且由于声明未扩展到FOOFOO因此仍然被禁止;它必须被添加。
哈兹2012年

6

真正的决定性因素是您要多久使用同一个名称拥有多个事物。不区分大小写在SQL中起作用,因为您通常不希望使用名为的列SELECT。在Java中这会很烦人,因为每隔一行看起来像Object object = new Object(),您希望在其中相同的名称引用一个类,一个实例和一个构造函数。

换句话说,区分大小写对于重载名称最有用,而在大型,复杂的项目中重载最有用。对于不经常使用的语言(例如脚本语言),不区分大小写可使编程更加简单。

我曾经做过一种规则语言,其中标识符不仅不区分大小写,而且不区分空格。我还允许创建引用相同标识符的别名。例如,ProgrammersStackExchange,程序员堆栈交换和PSE都解析为完全相同的符号,可以互换使用。

对于我的域名来说,这很好用,因为域名有很多非常著名的方式来引用同一件事,而且命名冲突很少见。使用一个名称键入查询并使用另一个名称查询结果,不会令任何人感到惊讶。语言支持使域和编程语言之间的转换非常容易。但是,这也使某些任务更加困难,例如查找对变量的所有引用。幸运的是,在我的情况下,这种情况很少出现,或者很容易建立工具支持来提供帮助,但是您必须考虑到自己的情况。


我不希望为名称重用关键字是问题。SQL,Visual Basic和C#(前两个不区分大小写,后一个不区分大小写)都通过允许引用标识符的方式来解决此问题:("double quotes"[brackets]在MS SQL中)在SQL,[brackets]VB.net和@atsignC#中。
Random832

“您经常想拥有同一个名字的多件东西。” 不区分大小写意味着您必须增加一些开销来消除名称的歧义,否则这些名称将由大小写处理(例如,m作为“成员”的前缀以区别于非前缀属性名称)。
nwahmaet 2012年

为什么要命名对象对象?那只是自找麻烦。
2012年

@Ben,假设您正在实现一个容器对象,您还打算在add方法中调用该参数吗?
Winston Ewert 2012年

@WinstonEwert,我会称之为o。因为它只是一个参数名称,所以您实际上调用它并不重要。只要它不是冒犯性的或违法的,或不致引起混乱的
2012年

5

假设您的脚本语言区分大小写-您是否要创建一个编译器或语法检查器,以告诉用户是否在变量名或关键字中使用了错误的大小写,从而造成了拼写错误?如果不是,那将是使该语言不区分大小写的一个非常有力的论据。


好点,但不是答案。

@delnan:答案可能不及Avner Shahar-Kashtan(我给+1的答案)那么好,但可能对OP很有帮助。
Doc Brown

3
是的,对您的评论很有帮助;)

因此,如果改写这个说法是要警告用户区分大小写,这只是一个好主意,那将是一个答案吗?对我来说,那是假定的。
JeffO 2012年

不,那么这只是次要点,很难回答作为答案的问题。恕我直言。

4

您可以即时声明变量吗?如果是这样,我会反对区分大小写,因为跟踪由

ATypo = 42; 

相对于

Atypo = 42; 

当两个语句相等时,将不必要地要求调试时间,这会使生活更轻松。


2
恕我直言,它也使阅读更加容易。毕竟,当您开始一个句子时,您会将第一个单词大写,但不要更改其含义。代码也一样!
NWS 2012年

2
@delnan-您想要可读性,它使用相同的字母,为什么在更改大小写时更改含义?
NWS 2012年

1
@delnan,根据美国最高法院的说法,计算机语言是一种设计语言,旨在被计算机和人类理解(在裁定计算机代码受第一修正案保护的情况下)。它们不是英语,但是它们是一种语言,并且说“ BOB”不同于“ bob”不同于“ Bob”在任何旨在供人类使用的语言中都是白痴。是的,我们可以学习应对,但这绝不是借口。
2012年

2
@Ben让我做个比喻。与编程语言不同,数学符号专用于人类。不区分大小写是古代计算机的历史产物的通常论点在这里不适用。但是我怀疑任何数学家都会争论a并且A应该互换。他们始终如一,毫无例外。例如,在某些情况下,大写字母用于集合,而小写字母是集合成员。另一个例子发生在电气工程中,小写与时间有关,大写与时间无关...

2
@Ben ...在这些和其他情况下,我不认为区分大小写是一个限制。我认为这是通过约定(尽管其中包括大写)来传达含义的惯例,从而释放了多余的符号,从而可以更有效地使用它们。像任何特定于领域的简短表示法一样,这对于外行来说似乎有些陌生,但可以使专家们更好地,更快地进行交流。

2

给出了诸如FORTRAN,BASIC,SQL之类的语言示例,称它们不区分大小写。

FORTRAN和SQL(和COBOL)不区分大小写的原因是,它们最初是为在普通字符集只有大写字母的计算机上使用而设计的。至少(至少)这些语言中的不区分大小写是一种历史的手工艺品,而不是一种语言设计选择。

现在您可以辩称,对大小写的不敏感性会更宽容,但另一方面,因为对大小写的敏感度是由用户选择的,因此可以使代码更具可读性。


4
我讨厌参数“ X是好的,Y强制执行相关的Z,因此Y通过强制X来做好”(例如,理智的编码样式/ Python /越位规则)。即使允许,没有优秀的程序员能够以会严重影响可读性的方式利用大写字母。那些不区分大小写的人在区分大小写的环境中也大写不一(并犯下了其他一百种暴行),他们被迫对每一个名字的使用都使用相同的大写形式。错误的程序员可以用任何语言编写Fortran。(免责声明:我是区分大小写的

你猜怎么了。我厌倦了不得不阅读由糟糕的程序员编写的代码,这些程序员认为他们是如此优秀的程序员,以至于他们可以开发自己独特的样式规则。(免责声明:我是在FORTRAN和COBOL时代学习编程的,并且讨厌那个时代的不区分大小写和其他语言上的暴行。)
Stephen C

不区分大小写的语言对大写的任何使用都构成对不区分大小写的滥用。
卡兹(Kaz)2012年

@Kaz-erm ...尝试告诉一百万SQL程序员。
Stephen C

1

区分大小写被认为是有害的。

生活不区分大小写,用户或程序员也不一样。

区分大小写的语言是历史悠久的事故,是受约束的系统的结果,这些系统发现不区分大小写的比较比较困难。这种障碍不再存在,因此没有理由再次使区分大小写的计算机系统成为现实。

我什至可以说区分大小写是有害的,因为它使计算机的便利性高于用户的便利性。

(相关,我记得几年前,一些天才因为他的名字大写而拒绝支付他的信用卡账单,但是他拼写错了。)有效的付款要求。法官应理所当然地对待该论点。


区分大小写并不能将计算机的便利性带给用户。我已经实现了区分大小写和不区分大小写的语言,唯一的区别是在几个地方有一个附加的函数调用。此外,其他答案还表明,由于字符集有限,“敏感性”问题是历史产物,与您的理论相矛盾,不是吗?

Unicode将其置于其他领域。
DeadMG 2012年

3
该博客没有提供任何理由说明为什么它在C语言中不好,仅在Python或PHP中如此,并且OP不在谈论区分大小写的标识符,而在谈论关键字。该链接对于该主题绝对无话可说。
DeadMG 2012年

1
@Ben编辑器可以(并且确实)在键入时固定大小写,而不考虑语言规则。允许仍然存在错误的错误(例如,因为您手头没有花哨的编辑器)无济于事。这意味着留下问题,而不是抱怨要解决它。而且,一旦我使用一致的大写字母,我就可以拥有多个大小写不同的标识符,但是由于上下文和大写字母的存在,它们表示非常不同的事物并且易于为人类解析,没有歧义。

2
@本:在某些语言中,有非常严格的词典习惯,甚至规则。在C和C ++中,全大写字母是一个宏,并且宏应保持全大写字母以防止混淆。对于带有或不带有首字母大写的符号,某些语言具有不同的含义(我不知道它们在没有相应大写和小写字母的各种语言中的表现如何)。如果您有类似的规则或约定,则会得到不同名称空间的某种效果,并且在不同名称空间中复制标识符名称通常会起作用。
David Thornley 2012年

1

从我的个人经验来看,区分大小写和不区分大小写的语言之间并没有太大区别。

更为重要的是命名和结构约定,程序员应该保留在其代码中,并且没有编译器或解析器为他检查它。如果您遵循某种规则,您将很容易知道一个专有名称(您不会认为您是否将变量命名为checkOut或CheckOut),并且您的代码可能区分大小写并且更易于阅读。

不应以相同的含义使用CheckOut和checkOut和checkout以及cHeCkOuT和CHECKOUT。这会损害可读性,并使对这种代码的理解更加痛苦(但是,有一种更糟糕的事情,那就是破坏代码的可读性)。

如果您使用某种规则,例如,您将一目了然:

CheckOut.getInstance()-它是称为checkOut.calculate()的类的静态方法-它是将对象保留在名为_checkOut.calculate()的变量或公共字段中的方法-它是将对象保留在称为CHECKOUT的私有字段中的方法-这是最终的静态或常量字段/变量

而不签出其他文件或文件的某些部分。它使读取代码更快。

我看到许多开发人员使用类似的规则-用我经常使用的语言:Java,PHP,动作脚本,JavaScript,C ++。

在极少数情况下,可能会对不区分大小写的内容感到生气-例如,当要使用CheckOut作为类名,而想使用checkOut作为变量,而又因为它们相互冲突而无法使用时。但这是程序员习惯于区分大小写并在其命名约定中使用它的问题。可以使用不区分大小写的语言使用带有标准前缀或后缀的规则(我不使用VB编程,但我知道许多VB程序员都具有这种命名约定)。

简而言之:我认为区分大小写更好(仅适用于面向对象的语言),因为大多数开发人员都使用区分大小写的语言,而且大多数开发人员都基于区分大小写使用命名约定,因此他们希望更好的语言是区分大小写的,因此能够坚持自己的规则而无需进行任何修改。但这是相当宗教性的论点-不是客观的论点(不是基于实际的缺点或区分大小写的好方面-因为当涉及到bAd DeVeLoPeR时,对于优秀的开发人员,我看不到任何东西,可能会产生噩梦般的代码即使区分大小写,也没有太大区别)。


1

编程语言应不区分大小写。

如今,如此之多的语言区分大小写的主要原因仅仅是出于对货物习惯的语言设计:“ C就是这样做的,而C非常受欢迎,所以它一定是正确的。” 和其他很多事情一样,C证明了这一错误。

这实际上是C和UNIX背后的驱动原理的一部分:如果您在易于实施的不良解决方案与难以实施的良好解决方案之间做出选择,请选择不良解决方案,并将解决混乱的负担推到另一边。用户。 这听起来像蛇,但绝对是真的。它被称为“更糟糕的原则”,在过去的几十年中,由于C和C ++,它直接造成了数十亿美元的损失,这使得编写故障和不安全的软件变得太容易了。

使语言不区分大小写肯定更容易;您不需要词法分析器,解析器和符号表就不必执行额外的工作来确保所有内容都以不区分大小写的方式匹配。但这也是一个坏主意,原因有二:

  • 首先,尤其是在构建脚本语言时,这是一个简单的错字,其中一个地方称为“ myObject”,另一个地方称为“ MyObject”,您显然是在指相同的对象,但与大小写有点不一致,不会变成运行时错误。(这是臭名昭著的错误脚本语言的主要痛点,例如Python。)
  • 其次,不区分大小写意味着仅通过更改大小写就不能滥用区分大小写,使同一个单词在相同范围内引用两个不同的事物。如果您曾经不得不在C环境中使用Windows代码,并遇到诸如的丑陋声明HWND hwnd;,那么您将确切地知道我在说什么。这样写的人应该被带走并开枪,并且使语言不区分大小写可防止区分大小写滥用进入您的代码。

因此,请付出额外的努力使其正确。生成的代码将更干净,更易于阅读,更少的错误,并使您的用户更加高效,这不是任何编程语言的最终目标吗?


编程语言应具有词法作用域,以在运行时捕获这种类型的错误(即使它们是高度动态的)。Common Lisp是高度动态的语言,但是编译器会告诉我们何时使用了没有词法绑定且没有全局定义为动态变量的变量。您不能依靠大小写不敏感,因为您想捕获所有错别字,而不仅仅是涉及大小写的错别字。
卡兹(Kaz)2012年

我不在乎HWND hwnd;。这是区分大小写效果很好的示例。全大写字母“印第安山”的惯例虽然很愚蠢。hwnd_t hwnd好多了。我怀疑这全是因为FILE。曾几何时,版本Unix 6在其I / O库头文件中具有:#define FILE struct _iobuf。大写是因为它是一个宏。当它成为ANSI C中的typedef时,所有大写字母的拼写都保留了下来。我认为正是通过模仿这一点,发明了ALL_CAPS_TYPE约定,并在《贝尔实验室》“印第安山风格指南”中将其编纂。(原始版本!)
Kaz 2012年

如果您现在在Google上搜索“ Indian Hill样式指南”,那么您会发现大部分是Bell实验室对1990年文档的引用,该文档完全改写了所有caps typedef名称:没有任何此类建议的痕迹。但是原始版本推荐的东西typedef struct node *NODE。我敢肯定,这一定是Microsoft掌握的地方。因此,请怪贝尔实验室HWND
卡兹(Kaz)2012年

1

我不敢相信有人说“区分大小写使阅读代码更容易”。

它肯定不是!我在同事的肩膀上看着名为Company和company(公共变量Company,相匹配的私有变量company)的变量,他对字体和颜色的选择使得很难分辨两者之间的区别,即使彼此相邻也是如此。

正确的语句应为“大小写混合使阅读代码更容易”。这是一个更为明显的事实-例如,名为CompanyName和CompanyAddress而不是companyname的变量。但是我所知没有一种语言使您只能使用小写的变量名。

我所知道的最疯狂的约定是“大写公共,小写私有”。只是自找麻烦!

我对错误的看法是“更好的是,某些事情会吵闹且尽快,而不是悄然失败,但看起来会成功”。而且没有比编译时间要早的了。

如果在使用大写字母时错误地使用了小写字母变量,则在同一类中引用它时,该变量通常会编译。因此,您似乎可以在编译和运行时均获得成功,但会巧妙地做错事,并且可能很长一段时间都没有发现它。当您确实发现有问题时

最好使用私有变量具有后缀的约定-例如,公司公共变量,公司P私有变量。没有人会意外地将两者混为一谈,并且它们在智能感知中一起出现。

这与人们对匈牙利表示法的异议形成了鲜明对比,匈牙利表示法的前缀是私有变量pCompany不会出现在intellisesne中的合适位置。

该约定具有可怕的大写/小写约定的所有优点,而没有缺点。

我认为人们感到需要区分大小写以区分变量,这一事实表明我既缺乏想象力,也缺乏常识。或者,可悲的是,人类的绵羊喜欢遵循约定的习惯,因为“这就是它总是会完成的方式”

即使彼此相关,也要使您使用的事物彼此之间明显且明显地不同!


1
好了,所以companyName == companyname。看来合理,但是您如何处理语言环境?像在PHP中一样,在世界各地编译程序会导致不同的语义吗?您是否将完全以英语为中心,并且仅支持标识符中的ASCII可打印集?不区分大小写会带来很多额外的复杂性,而带来的额外收益却很少。
Phoshi 2014年

0

没有充分理由不应该不区分大小写。例如,使用Unicode处理大小写比较可能很麻烦。较旧语言的区分大小写(或缺乏区分大小写)并不重要,因为它们的需求差异很大

这个时代的程序员期望区分大小写。


1
案例比较并不难。只需分解您的标识符即可。É= E'= e'=é。请记住,您还可以选择哪些情况下有章可循,英语是一个合理的选择。(当然,如果您的关键字也是英语)
MSalters 2012年

2
是的,在整个Unicode空间中,它们“那么难”。
卡兹(Kaz)2012年

1
“这个时代的程序员期望区分大小写”吗?只有他们与C族一起工作太久才患有斯德哥尔摩综合症。
梅森惠勒

嗯,C系列仅占很大一部分语言和代码。此外,我认为这是一件好事,您的评论没有提出任何理由。
DeadMG 2012年

0

区分大小写使代码更具可读性,并使编程更容易。

  • 人们发现正确使用混合大小写更容易阅读

  • 它允许/鼓励CamelCase使得相同的单词具有不同的大小写可以引用相关的事物:Car car; 因此,car创建了名为type 的变量Car

  • ALL_CAPS_WITH_UNDERSCORES通过多种语言约定表示常量

  • all_lower_with_underscores可以用于成员变量或其他。

  • 所有现代编程工具(源代码控制,编辑器,diff,grep等)均专为区分大小写而设计。如果您使用不区分大小写的语言,那么您将永远遇到程序员认为理所当然的工具的问题。

  • 如果将解释语言,则对代码的大小写不敏感的解析可能会降低性能。

  • 非英文字符呢?您是否现在决定不再支持科普特语,汉语和北印度语?我强烈建议您将语言默认设置为UTF-8,并且支持某些语言不包含大写或小写字母的语言。您不会在关键字中使用这些字符,但是当您开始在各种工具中关闭区分大小写(例如,在文件中查找内容)时,您会遇到一些超现实且可能令人不快的体验。

有什么好处?您提到的3种语言是1970或更早的版本。没有现代语言可以做到这一点。

另一方面,任何使最终用户满意的事物都会给世界带来一点光明。如果它确实会影响用户的满意度,那么您就必须这样做。

如果您想让最终用户真正简单,可以做得比区分大小写/不区分大小写更好-请看一下Scratch!减少了卡通猫的数量,增加了对企业友好的颜色,并且您拥有我所见过的最友好的语言-而且您无需编写任何东西!只是一个想法。


1
我认为您想说“不区分大小写是一场噩梦”。日语确实有大小写:平假名和片假名是不同的情况。就像A和a在某种程度上“相同”一样,あ和ア也是如此。片假名有时被用来强调,在使用罗马字母的语言中类似地使用大写。不用说,在编程语言标识符中将平假名和片假名视为相同是愚蠢的。
卡兹(Kaz)2012年

谢谢-丰富了!我刚刚整理了一下帖子。
GlenPeterson 2012年

1
Car car;是最好的一个参数大小写:它的丑陋,如果你的语言是不区分大小写,你不能滥用区分大小写的方式。
梅森惠勒

1
Car myCar;好多?
GlenPeterson 2012年

@梅森·惠勒:如果我们将语言结构限制在我们不能滥用的范围之内,我们将无能为力,是吗?对于任何滥用区分大小写的人,我的建议是“不要”。
David Thornley 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.