为什么许多语言区分大小写?

仅仅是继承问题吗?C++ 区分大小写,因为 C 是,Java 区分大小写,因为 C++ 是,等等?还是背后有更务实的原因?

有帮助吗?

解决方案

的Unix。

的Unix是大小写敏感的,以及用于在Unix使用而开发许多编程语言是大小写敏感的。

电脑是不宽容 - 大写字母是不是小写字母,它们是完全不同的一回事。再换处理周期,RAM等进行昂贵的它不被视为值得的努力,迫使编译器和电脑是“宽容”的时候,人们只是想获得的东西的工作。

注意如何区分大小写并没有真正成为直到事情有用的东西如的Visual Basic 来到沿 - 一旦公司开始得到投资于让群众程序是他们的底线是好事的概念(即微软赚更多的钱,如果有在Windows上更多的节目)做的语言下手要更友好,更宽容。

其他提示

我不认为你会得到比一个更好的答案“因为该语言的作者(们)认为这是这样更好”。就个人而言,我认为他们是对的。我讨厌相同的源文件中任何地方找到这些线(并且是指相同的对象+方法)...

SomeObject.SomeMethod();
...
SOMEOBJECT.SOMEMETHOD();
...
someObject.someMethod();
...
sOmEoBjEcT.sOmEmEtHoD();

我不认为任何人会很乐意看到这个...

要考虑的一个有趣的事情是,英语也是区分大小写。 (我怀疑这是最自然的语言真实的,但它很可能不适合所有真实的。)

有一个很大的区别(我住的地方,反正雷丁镇附近):

  

我喜欢读。

  

我喜欢读。

同样的,虽然很多人的的把握不当,而你通常可以明白什么意思,这并不意味着这样的写作被认为的正确的。我是一个坚持己见的人,当谈到这样的事情,这是不是说,我得到的一切权利,当然我自己。我不知道这是否是编程语言区分大小写的遗产的一部分,但我怀疑它可能是。

有关的编程语言的情况下的灵敏度的一个明显的优点是,文本变得文化不敏感,以及。这是够糟糕不得不偶尔拼出到文本编码用于源文件编译器 - 必须指定的文化的它在会更糟:(

它实际上非常实用的,既为显影剂和用于语言语法规范:下/上壳体的区别增加表现力很大关系标识符命名

从视图语言的语法的点,可以强制特定标识符来开始一个小写或大写(例如Java类名)。这使得更容易解析,因此有助于保持干净的语法。

从一个开发者角度来看,这允许大量方便的编码约定的,使你的代码更清晰,更容易理解。

我的猜测是这种情况下的灵敏度放大名字空间。一个很好的特技如

MyClass myClass;

将是不可能与不区分大小写的编译器。

返回解析和编译为真正的昂贵,并会采取一切夜间是有利的编译器,如果不担心情况下。

在标识符进来存在即是仅通过其独特的情况下它变得非常困难回去。许多开发人员喜欢它,似乎没有成为一个大愿望将其复原。

<强> ExpertSexChange

我相信这是堆栈溢出,你必须付费阅读的答案竞争对手。嗯...有不区分大小写,网站的名字的含义是模糊的。

这是一个很好的理由语言包括大小写敏感的。更加明确!模糊到程序员被认为是令人讨厌的。

区分大小写通过使用命名约定的增加语言可读性。你可以不写

Person person = new Person("Bill");

如果您的语言是不区分大小写,因为编译器将无法类名和变量名之间进行区分。

此外,具有人,人,人,人,人都是等价的令牌会给我头疼。 :)

什么是资本形式的 I ?的 I (U + 0049)或 I (U + 0130)?

大写依赖于语言环境。

许多(非编程)语言(例如欧洲使用罗马字母)是大小写敏感的,所以它的自然对这些语言为母语的人使用大写/小写区别。

在非常想法,编程语言不会区分大小写是从早期代硬件的限制引起的伪影的历史(包括所使用的5位字符计算机预电传打字机码)。

谁主张的情况下,盲目的语言的人必须是无法分辨

IAmNowHere

IAmNowhere

这是一个笑话的; - !)

由于他们为的笨得像青蛙的盒子的,对于正是在这个线程相反的观点(我甚至会问这是什么是什么。树木,不见森林的理由和所有的)。

当FOOBAR = FooBar的= foobar的,你可以选择你的惯例,和其他程序员可以做同样的他们是否分享您的喜好或不的。没有混淆。

它们也不能得逞的是具有恒定,函数和变量与所有在同一文件中相同的名称,尽管有不同的盖的天才行程。同样,没有混乱。

您打电话给你变的网站,他们称他们的网站,并且系统就会犯糊涂?不是一个简单的抓或者,当你扫描。

至于查找,是不是真的那么更多的处理转换的名称为小写寻找它之前?做你自己过早的优化是一回事,从您所选择的语言的开发人员希望它是缺少点的一个整体的其他层面。

...然而,所有这些答案说区分大小写减少混乱。

还有Common Lisp的,这是一个区分大小写的语言,很多人误认为是不区分大小写。当您键入(car x)到监听器,它会变成(CAR X)进行处理。它可以定义与小写名称的符号,但它们必须与像|lower-case-symbol|报价。因此,在(car x)(CAR X)(Car X)键入所有的工作原理相同。

(弗朗茨Lisp的是在一个点上介绍了他们所谓的“现代”的资本,其中,监听不会折的情况下,和CL关键字是小写。我从来不跟着它不够好,知道那里发生了什么。)

的信的大写是不是一个普遍的概念。 Java使用Unicode的,所以如果你想不区分大小写的Java,你的程序可能取决于哪种语言环境它是在编译改变的意思。

大多数语言不要让你把点或逗号(或撇号或空格)的整数文字的中间,可能是因为这也是语言环境有关的。

从 .NET Framework开发人员指南 大小写约定的,案例灵敏度:

  

在大写准则存在   只是为了让标识更容易   读取和识别。套管不能   用作避免名称的手段   库元素之间的冲突。

     

不要以为所有的编程   语言是区分大小写的。他们是   不。名称不能大小写不同   单独

如何骂你,如果你没有CAPS? AHHH!

您必须表现力。但在所有诚实,世界上所有的人,那些谁与编程逻辑的工作将是第一个坚持差异其实差异。

区分大小写不真正帮助的情况下保持一致。

Foo.Bar  
foo.Bar  
fOO.bAR  

在,可以自动由编辑器容易地被固定的情况下不敏感的语言。 在区分大小写的语言将其固定它很难,因为它可能是合法的。编辑器首先必须ckeck如果foo.Bar和fOO.bAR存在,并且还具有猜测,你用错误的情况中键入而不是忘记声明变量(为Foo是不同于FOO)。

在这里很多人都表示,这将是坏的几种形式的资本化是指同一件事,e.g:

person
perSoN
PERSON

什么是非常糟糕的是,如果这些都被称为在代码中不同的对象。如果你有变数人,人和人都是指不同的东西,你已经有了一个问题。

我看到支撑壳灵敏度每个例子是基于写坏,undescriptive代码的愿望。例如“日期”与“指明MyDate”的说法 - 这些都是同样undescriptive 的和不好的做法。比较好的做法是将它命名它实际上是什么:生日,雇佣日期,invoiceDate,等等。又是谁在他们的脑子会想写出这样的代码:

Public Class Person
    Public Shared ReadOnly PERSON As Person
End Class
Public Class Employee
    Public person As Person = person.PERSON
End Class

令人惊讶的是,这是完全有效的情况下的敏感VB.Net代码。这种情况下,感光度可以让你更公然违抗良好的编程习惯思想是反对的论据,而不是它。

由于许多人发现employeeSocailSecurityNumber就像可读性employee_social_security_number,它是短。

我认为有一个区分大小写的语言鼓励人们写代码很差。

Const SHOESIZE = 9

Class ShoeSize

ShoeSize.shoesize = SHOESIZE

call shoeSize(ShoeSize);

function shoeSize(SHOEsize)
{
   int ShoeSIZE = 10
   return ShoeSize
}

咄。你想不出比“ShoeSize”用于不同目的的一个更好的变量名?这里是一个数十亿,你可以使用不同的话,但您选择使用ShoeSize,而不是只保留?

和你也可以(愚蠢)只使用单字母(“A”和“B”和“C”)的所有类,变量,函数和方法。

不过的为什么的会要?

使用名有意义,而不是:

function a(a)
{
    int a = a.a;
    return a
}

有另外一个原因语言是大小写敏感的。 ID可以被存储在哈希表和哈希表依赖于哈希函数,将给予不同的散列对于不同的情况。它可能不是很方便通过哈希函数运行它们之前,所有的ID,以全部大写或全部转换成较低。我遇到了这个问题,当我在写我自己的编译器。这是简单得多(懒惰)申报我的语言作为区分大小写。

我已经阅读整个线程。我必须相信,那些报告有大小写发现价值从来没有在一个真正的高级语言(其定义为不区分大小写)进行编程。 K&R承认C是中级。在帕斯卡尔,德尔福,拉撒路,ADA等编程后,便知道这非常可读的代码是简单的编写和去不沉迷于简洁的区分大小写构建快速运行。毕竟,可读性是关于这一主题的第一个和最后一个字。代码是为人类,而不是电脑编写。没有问题与不区分大小写的代码调试。 当一个向下移动到一个中等水平的语言中,人们发现,有优点NO到外壳灵敏度。然而,存在着相当多的花调试区分大小写小时引起的问题。特别是从不同的编码器模块拼凑时。 这似乎也有大量的受访者不明白什么是不区分大小写的意思。只有A-Z受影响的人物。这些都是ASCII字符的顺序子集。的机器代码三个或四个字节使编译淡漠在该范围内的字符到外壳。它不会在酒吧,数字,或其他任何改变。关于其他语言和字符集的点根本不适用于此讨论。编译器或断流器将被编码到临时转换或在编译时根据其存在ASCII或不能转换的字符进行分析。

我在像Python新语言已经问世重复的是K&R所犯的错误震惊。是的,他们保存在编译器,源代码和目标代码的总RAM为1000个字节的环境半打字节。那是当时。现在的内存是没有问题的。现在,没有合理的理由,甚至在Python的保留字是大小写敏感的!我不认为我会需要的变量或函数的名称中使用“因为”,“打印”的。但是,这种可能性已被昂贵的花费与灭弧在每个标识符的确切情况contenting时间保存。一个糟糕的协议,我认为。

我已经在支持区分大小写的读迄今最接近的事是对散列的评论。但是可以与注重细节处理,这些罕见的编码事件似乎并没有是值得推敲毫无意义的编码器必须使用写大小写敏感的代码。两种观点的问题。一个是鼓励坏的编码,设置陷阱中的代码,并且需要额外注意从更大的概念转移开。其他没有不好的一面,已经在高级语言完美地工作,并允许灵活性是它没有任何伤害。它看起来对我来说又VHS的另一起案件中战胜BETA。这只是我的两分钱的价值在这里。

学习总是通过示例更容易因此在这里不言而喻:

C#(区分大小写但是从VB.NET可用这是不区分大小写):

CONSTANT_NAME
IInterfaceName // Uses I prefix in all case sensitive and insensitive languages
ClassName      // Readable in both case sensitive and insensitive languages
_classMember   // sometimes m_classMember or just classMember
DoSomething(someParam) // Method with action name, params can be _someParam
PropertyName   // Same style in case sensitive and insensitive languages
localVariable  // Never using prefix

Java和JS使用类似风格的C#,但方法/功能/事件声明的变量一样DoSomething的,的onEvent。

ObjectPascal(Delphi和拉扎勒斯/ FPC不区分大小写,像ADA和VB.NET)

CConstantName     // One can use Def or no prefix, not a standard
IInterfaceName
TClassName        // Non-atomic types/classes have T prefix e.g. TStructRecordName
PSomePointer      // Pointers have types, safer low level stuff
FClassFieldMember // F means Field member similar to m
DoSomething(Parameter) // Older code uses prefix A for parameters instead
PropertyName
LLocalVariable    // Older code uses prefix for parameters not local vars

仅使用OneCase并为每种类型的前缀使得在所有的语言的意义。即使是没有前缀开始的语言有新的结构,如不依赖于案件,但使用的前缀,而不是接口。

所以,它真的并不重要,如果一门语言是区分大小写。加入新的概念的情况下进行了太混乱由单独壳体中表达敏感的语言和使用前缀必需的。

由于大小写敏感的语言使用前缀开始,这是唯一合理的停止使用的情况下具有相同标识符名称someIdentifier SomeIdentifier SOME_IDENTIFIER,ISomeIdentifier,只是使用前缀它是有道理的。

考虑此问题: 你叫什么类成员,方法/函数参数调用的东西,叫什么局部变量,什么情况下约定可以用来轻松地将这些区分? 是不是很容易,只需使用最ConsistentCaseStyle随处可见,并添加一个前缀?

不区分大小写的语言球迷关心代码质量,他们只是想要一个风格。有时候,他们接受一个事实,就是库写得不好,用严谨的作风,而库可能没有风格或代码差。

敏感和不敏感的语言需要严格的纪律这两个情况下,更有意义,只有一个风格无处不在。它会更好,如果我们有这样的只使用StrictCase,一个风格无处不在,前缀的语言。

有很多的C代码很差,区分大小写不让它可读性,而且你不能做任何事情。在不区分大小写的语言,你可以执行代码中的良好作风,不重写库。 在不一个StrictCase语言中不存在,所有的代码将有体面的质量:)

看起来像人大多同意的情况下的灵敏度是重要的,我同意。

然而,它可以是恼人的,当你在正确的情况下键入的东西,所以我觉得IDE应该让你在错误的情况下键入,但如果你打的自动完成快捷方式它应该做的不区分大小写的匹配。这为我们提供了两全其美的。

  

通过典型的编码标准,人将是一个类,人一变量名,和PERSON的常数。这往往很有用同一个词大小写不同意味着什么相关,但略有不同。

所以,如果你在你的业务有三个工作人员都称罗伯特,你把它们称为罗伯特,罗伯特和罗伯特·你会吗?并依靠人确切地知道你的意思是哪一个?

给他们的电子邮件,例如Robert@widgets.com,robert@widgets.com和ROBERT@widgets.com地址,如果你的电子邮件系统是区分大小写?

有未授权的违反的个人数据的电位将是巨大的。更何况,如果你发送的数据库root的密码即将被解雇的不满的员工。

更好的给他们打电话鲍勃,罗比,罗伯特。更妙的是给他们打电话罗伯特,罗伯特·B和罗伯特·C如果他们的姓氏是如亚瑟,银行,和Clarke

真的 - 为什么地球上有一个命名惯例,邀请错误或混乱,依靠人民是非常警觉?你这么短的话在你的volcabulary?

至于谁提到了所谓方便的技巧“MyClass的MyClass的”人 - 为什么,为什么,为什么?你故意使其一眼看到难使用的方法是否是一个类方法或实例的方法。

另外,你失去了机会告诉旁边的人阅读你的代码有关的类的实例特别多。

有关实例。

客户PreviousCustomer

客户NewCustomer

客户CorporateCustomer

您的实例名称需要理想告诉你的同事不仅仅是它是基于!类更多

如果字分离并不重要,那么为什么我们把单词之间有空格?因此,我认为,强调与一个名字的话做增加可读性。用适当的字符也是大写小写是最容易阅读。最后,这肯定是容易得多,如果所有的话可以通过口耳相传来传达 - “企业下划线客户”,而不是“资本C下部箱体O; R PØR A T E下划线字母C小写ü式TØM E R”! - 前者可以“在一个人的头上”说出后者则不能 - 我不知道谁的人是快乐的区分大小写在他们的大脑是如何处理这些区分大小写的名字 - 我真的很挣扎。所以,我觉得这种情况下,灵敏度是不是所有有帮助 - 从COBOL在我看来retrogade步

因为人们对事情想得太多了。

当不区分大小写并保留大小写并与类型和变量命名空间之间的分离相结合时,它的效果最好。这意味着:

  • 如果你将一个类声明为 'TextureImage' 然后尝试将其用作 'textureImage',IDE 可以自动更正您。这给您带来的好处是,除非您声明标识符或使用下划线,否则您永远不必按 Shift 键。

  • 就像 Java 和其他几种语言一样;输入“完全有效”MyClass myClass”。IDE 和编译器应该可以毫无问题地区分类型的使用和变量的使用。

此外,不区分大小写保证 'o' 和 'O' 永远不会引用不同的对象。常见的论点包括:

  • "sOmEoNe wIlL tYpE cOdE lIkE tHiS"; => 并且永远不会允许某人加入编程团队,所以这是一个稻草人的论点。即使他们确实设法做到了这一点,不区分大小写更多的是解决方案而不是问题,因为这意味着您不必记住他们使用的任何疯狂的大写/小写组合。

  • “你不能轻易地将不区分大小写的国际化!”;=> 超过 95% 的编程语言都是用英语编写的,这是有充分理由的。没有竞争的字符编码,并且地球上绝大多数键盘都是基于英语的(部分或全部)。支持 unicode 标识符可能是 21 世纪最愚蠢的想法;因为很大一部分 unicode 字符是 frikkin 不可见的代理,所以无需使用谷歌翻译来阅读代码就已经够困难的了,而无需复制粘贴标识符或使用字符映射表来编写代码也已经够困难的了。

  • “但是区分大小写的语言有更多的标识符!”;=> 不,它们的标识符在语法上超载,这要糟糕得多。

我不使用任何不区分大小写的语言,但如果你认真考虑这类事情,优点是显而易见的。

有一个合理的答案可能是语言的设计者认为它 会使语言更容易理解思考未来:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top