可能的重复问题:
大小写敏感的编程语言有什么优势吗?
为什么许多编程语言是大小写敏感的?
我一直很好奇,为什么编程语言要设计成大小写敏感的呢?
我这个蠢蛋无法理解它有任何帮助的可能性。
但我相信肯定有原因。在任何人提到一个变量名叫做dog
和Dog
区分大小写是非常不好的实践之前,请注意,这样做真的很糟糕,对吧?
欢迎任何评论,并可能提供有关此问题的历史!我对大小写敏感性不敏感,但对大小写敏感性的敏感性敏感,所以让我们保持所有答案和评论都文明礼貌!
可能的重复问题:
大小写敏感的编程语言有什么优势吗?
为什么许多编程语言是大小写敏感的?
我一直很好奇,为什么编程语言要设计成大小写敏感的呢?
我这个蠢蛋无法理解它有任何帮助的可能性。
但我相信肯定有原因。在任何人提到一个变量名叫做dog
和Dog
区分大小写是非常不好的实践之前,请注意,这样做真的很糟糕,对吧?
欢迎任何评论,并可能提供有关此问题的历史!我对大小写敏感性不敏感,但对大小写敏感性的敏感性敏感,所以让我们保持所有答案和评论都文明礼貌!
在支持这种写法的编程语言中,拥有仅大小写区分的两个成员并非一定是不好的实践。例如,在C#中,以下代码是相当常见的:
private readonly string name;
public string Name { get { return name; } }
个人而言,我对大小写敏感很满意 - 特别是它允许像上面那样的代码,其中成员变量和属性遵循约定,避免混淆。
请注意,大小写敏感性也涉及文化方面... 不是所有文化都认为同样的字符是等效的...
编程语言中大小写敏感的最大原因之一是可读性。意思相同的事物也应该看起来相同。
我在相关讨论中发现了M. Sandin提出的下面有趣的例子:
I used to believe case sensitivity was a mistake, until I did this in the case insensitive language PL/SQL (syntax now entierly forgotten):
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
This passed unnoticed for several months on a low-volume production system, and no harm came of it. But it is a nasty bug, sprung from case insensitivity, coding conventions, and the way humans read code. The lesson for me was that: Things that are the same should look the same.
你能立刻看到问题吗?我没有...
PASSWORD=password
总是为真。 - BlorgbeardPASSWORD=password
看起来只是因为我们已经在大小写敏感的语言中编程了二十年或更长时间,并且我们被条件化地认为 PASSWORD 和 password 必须是两个不同的实体。 - JeremyP我喜欢大小写敏感以区分类和实例。
Form form = new Form();
如果你不能这样做,你最终会得到名为myForm
、form1
或f
的变量,它们不如简单的form
清晰和描述性。
大小写敏感也意味着您不会有对form
、FORM
和Form
的引用,它们都表示相同的含义。我发现阅读这样的代码很困难。所有对同一变量的引用看起来完全相同的代码更容易扫描。
Dim form As Form
,只有类型可以出现在As
之后)。再次强调的是C语法存在缺陷,而不是这个概念本身。 - Philipp想象你有一个叫做dog
的对象,这个对象有一个叫做Bark()
的方法。同时你定义了一个叫做Dog的类,这个类中有一个静态方法Bark()
。你写下了dog.Bark()
。那么它会调用对象的方法还是类中的静态方法呢?(在一个没有::
的语言中)
Dog
的类,为什么我必须要把我的实例命名为dogVar
,dog_
甚至是(发抖)m_dog
?@m00st: 如果Dog
是继承体系的根,并且您需要命名指向任何Dog
子类实例的指针,您该怎么办? :) - anton.burger从一个忽略规范等价性的天真角度来看,大小写敏感的比较是微不足道的(只需比较代码点),但大小写不敏感的比较在所有情况下都没有明确定义,且规则难以记忆。虽然可以实现它,但会意外地导致意想不到和令人惊讶的行为。顺便说一下,一些语言如Fortran和Basic一直是不区分大小写的。