Programming languages 语言中区分大小写的目的是什么?

Programming languages 语言中区分大小写的目的是什么?,programming-languages,language-features,language-design,case-sensitive,case-insensitive,Programming Languages,Language Features,Language Design,Case Sensitive,Case Insensitive,可能的重复项: 我一直在想,为什么语言设计成区分大小写 我的豌豆脑袋搞不懂它为什么有用 但我肯定有一个。在任何人说之前,让一个名为dog和dog的变量通过区分大小写来区分是非常糟糕的做法,对吧 感谢您的任何评论,以及关于此事的任何历史!一般来说,我对区分大小写不敏感,但对区分大小写很敏感,所以让我们保持所有答案和评论的文明 假设您有一个名为dog的对象,它有一个名为Bark()的方法。您还定义了一个名为Dog的类,它有一个名为Bark()的静态方法。您可以编写dog.Bark()。那它会做什

可能的重复项:

我一直在想,为什么语言设计成区分大小写

我的豌豆脑袋搞不懂它为什么有用

但我肯定有一个。在任何人说之前,让一个名为
dog
dog
的变量通过区分大小写来区分是非常糟糕的做法,对吧


感谢您的任何评论,以及关于此事的任何历史!一般来说,我对区分大小写不敏感,但对区分大小写很敏感,所以让我们保持所有答案和评论的文明

假设您有一个名为
dog
的对象,它有一个名为
Bark()
的方法。您还定义了一个名为Dog的类,它有一个名为
Bark()
的静态方法。您可以编写
dog.Bark()
。那它会做什么呢?从类中调用对象的方法还是静态方法?(在不存在
的语言中)

在支持它的语言中,两个成员只按大小写区分并不一定是不好的做法。例如,这里有一个相当常见的C#:

就我个人而言,我对区分大小写非常满意——特别是因为它允许像上面这样的代码,其中成员变量和属性无论如何都遵循约定,避免了混淆


请注意,区分大小写也有文化方面。。。并非所有区域性都将相同的字符视为等效的…

区分大小写的比较(从忽略规范等效性的天真角度来看)微不足道(只是比较代码点),但区分大小写的比较在所有情况下都不是定义得很好且极其复杂,规则也不可能记住。实现它是可能的,但会无意中导致意外和令人惊讶的行为。顺便说一句,像Fortran和Basic这样的一些语言一直都是不区分大小写的。

我确信最初这是出于性能考虑。将字符串转换为大写或小写进行无大小写比较并不是一项昂贵的操作,但也不是免费的,在旧系统上,它可能会增加当时的系统无法处理的复杂性


当然,现在,语言喜欢彼此兼容(例如VB不能区分C#类或函数,它们只在大小写上有所不同),人们习惯于用相同的文本命名事物,但大小写不同(参见Jon Skeet的答案——我经常这样做),无大小写语言的价值还不足以超过这两种语言。

编程语言中区分大小写的最大原因之一是可读性。意思相同的东西看起来也应该一样

我在一次相关讨论中发现了M.Sandin的以下观点:

我以前 相信病例敏感性是一个重要因素 错了,直到我在案子里这么做 不敏感语言PL/SQL(语法) 现在完全忘记了):

这件事好几年没有引起注意 几个月的小批量生产 系统,并没有带来任何伤害。但是它 是一个讨厌的虫子,从箱子里冒出来的 不敏感、编码约定和 人类阅读代码的方式。教训 对我来说,这是最重要的 相同的应该看起来相同


你能马上看到问题吗?我不能…。

为了区分类和实例,我喜欢区分大小写

formform=新表单()

如果您不能做到这一点,那么最终将得到名为
myForm
form1
f
的变量,这些变量不像普通的
表单
那样干净和描述性


区分大小写还意味着您没有对
表单
表单
表单
的引用,这三个词的含义相同。我发现读这样的代码很困难。我发现扫描所有对同一变量的引用看起来完全相同的代码要容易得多。

您无法理解区分大小写是个好主意的原因是因为它不是。这只是C语言(比如基于0的数组)的一个奇怪的怪癖,现在看起来很“正常”,因为有太多语言复制了C语言的功能

C在标识符中使用区分大小写,但从语言设计的角度来看,这是一个奇怪的选择。大多数从头开始设计的语言(没有考虑到在任何方面与C类似)都是不区分大小写的。这包括Fortran、Cobol、Lisp和几乎整个Algol语言家族(Pascal、Modula-2、Oberon、Ada等)

脚本语言是一个混合的包。许多文件系统是区分大小写的,因为Unix文件系统是区分大小写的,它们必须与之进行明智的交互。C是在Unix环境中有机地成长起来的,并且很可能从中学习了区分大小写的原理

我一直在想,为什么语言设计成区分大小写

归根结底,这是因为更容易正确地实现区分大小写的比较;您只需比较字节/字符,而不进行任何转换。你也可以很容易地做其他事情,比如散列

为什么这是一个问题?好吧,不区分大小写是很难添加的,除非你在一个支持字符的小范围内(特别是US-ASCII)。大小写转换规则因地区而异(土耳其的规则与世界其他地方的规则不同),并且不能保证翻转一个位会做正确的事情,也不能保证它始终是相同的位并且在相同的前提下。(IIRC,在某些语言中,有一些非常复杂的规则,在将元音转换为大写字母时,可以扔掉变音符号,在转换为小写字母时,可以重新引入它们。我完全忘记了细节。)

如果你是区分大小写的,你就忽略所有这些;只是比较简单。(请注意,你还是应该注意这个问题
private readonly string name;
public string Name { get { return name; } }
function IsValidUserLogin(user:string, password :string):bool begin
   result = select * from USERS
            where USER_NAME=user and PASSWORD=password;
   return not is_empty(result);
end