区分大小写的Vs不敏感语法

时间:2009-05-21 22:00:08

标签: case-sensitive

任何人都可以通过区分大小写来确定一个很好的案例(:-))吗?

C#:区分大小写 VB.NET:区分大小写 C ++:区分大小写 ...

更糟糕的是:在VB.NET 之类的语言中使用的XML 区分大小写。

由于XML同时具有 V alue和 v alue nodes ...

我在评论中一遍又一遍地被问到

  

“也许你可以拿出一个   为什么不区分大小写的论据是   在这样一个世界中正确的选择?“

这是一个例子: 我认为它类似于以下问题:URL应该区分大小写? www.cnn.com<> www.nN.com.cn 当然他们应该是一样的,ID盗窃天堂!因为人类并没有把那么多的注意力放在相同但可能有不同外壳的2根弦上。程序员是人类。所以getAge()和getage()在大多数人的脑海中都是一样的。


请注意:我认为我们不希望代码实际上有一个定义为getAget()的函数,然后让代码调用它getage(),VS(vb.net)将自动纠正getaget到getAge。所以代码很清楚,程序员知道正确的大小写。我的观点是:良好的IDE使问题不相关,但它在vb.net这样的非案例性语言中效果更好,然后让我们说c#。 参考:here

7 个答案:

答案 0 :(得分:11)

案例规则取决于文化。您是否想要一种编程语言,其中变量i 有时被认为与名为I的变量相同,有时它们是不同的变量? (这不是一个简单的例子,顺便说一句。在土耳其语中,I 是大写的i

老实说,这很简单。您是否希望编译器在您输入错误时纠正您,或者您是否希望它猜测您的意思?正如你所发现的,后者会导致错误。 VB假设“哦,你可能意味着同样的事情,没关系,我们不会阻止你”,而XML也是字面意思。

你的错误没有发生,因为区分大小写是坏的,它发生是因为草率很糟糕。任意改变案例最多可能没有问题,最坏的情况下会导致错误。假设最坏的情况,与你的情况一致。顺便说一句,这是区分大小写的语言强迫您做的事情。无论您的工具是否区分大小写,程序员都应区分大小写。只要世界具有敏感性和敏感性工具,区分大小写就会给您带来很多麻烦。如果我们能够重塑世界以使所有不区分大小写,那么支持敏感性的许多理由就会消失。但我们不能。

当然有点侧面说明: 在许多语言中,通常给变量和类型赋予相同的名称,但使用不同的大小写:

Foo foo; // declare a variable foo of type Foo

当然你可以争辩说“你不应该这样做”,但它很方便,它会立即告诉读者变量的类型。它允许我们创建一个Log类和一个日志对象。而且由于此对象的目的是记录,因此名称显而易见。

最后一点要考虑:

案例以实际语言呈现。以大写字母开头的单词与同一单词不同,但具有前导小写字母。 “worD”这个词不是正确的英语。信息在案例中进行编码,使文本更易于阅读。它告诉我们什么时候遇到一个名字,或者当一个句子开始时,这很方便。允许人们忽略案例规则会使文本更难阅读。因为代码通常应该尽可能地编写,为什么我们不应该在编程中做同样的事情呢?允许案例对重要信息进行编码。在许多语言中,Foo是一种类型,foo是一个变量。这是重要的信息。我编程的时候想知道这个。如果我看到一个名为“Getage”的函数,我想知道这是否是我之前从未听过的一些英文单词。但是当我看到“GetAge”时,我立即知道它应该被读作“Get”这个词后跟“Age”这个词。

顺便说一下,here是一个很好的例子,说明了在区分大小写的语言中你会遇到的有趣的惊喜。

答案 1 :(得分:4)

Slop在编程语言中绝不是一个好主意。你希望事情尽可能具体。你永远不希望你的语言猜测任何东西,它应该尽可能少地解决给定的问题。

至于具体答案,可读性如何? stoRetroData在视觉上与storeTRodAtA有很大不同吗?并不是说有人会做这样的事情,但允许它有什么意义呢?

我无法想出任何理由忽视案件。

至少这是我的意见 - 但你的里程可能会有所不同。

编辑:我可能应该以免责声明开始这个:

我学会了基本的编程,大约18年前也有同样的想法。相信我,这是20年后你会回顾的事情之一,然后去“哦,是的,我对此非常不对”(就像我现在一样)

答案 2 :(得分:2)

  1. 历史这就是它的完成方式。 XML是VB.NET区分大小写,因为XML标准需要它
  2. 国际化我们是否会支持所有语言的案例(法语,日语,希伯来语,克林贡语等)?

答案 3 :(得分:2)

现在有几种区分大小写的语言就是这种方式,因为它们所基于的语言区分大小写,转换会更容易。我个人更喜欢区分大小写,但杰夫阿特伍德写了pretty good article为什么不再需要区分大小写。

答案 4 :(得分:2)

有几个原因。

  • 找到不区分大小写的东西,我必须对所有地方都有“不区分大小写”的标记。使用UTF-8,也应该知道Klingon smallcase ..

  • 更重要的是,CamelCasing,CAMelcaSing。它不漂亮,但它使用了很多,而且相当理智。在不区分大小写的情况下几乎不可能。

  • 语言奇偶校验,例如xsd.exe(VS200x附带)可以为您提供的xsd生成类。当你有“价值”时,你的“价值”是什么?所以这又消除了另一种阻抗。

答案 5 :(得分:1)

案例在编程语言方面很好,但不是在符号名称中使用它,我们应该按原来的意图使用它 - 分隔句子或命令的开头或正确的名称。例如:

Var test = 0;
Console.writeline(test);
Test = test + 1;
Console.writeline(test);

太美了,......:P

答案 6 :(得分:0)

我发现不区分大小写只是愚蠢的。您应该遵循原始声明的大写。除了懒得键入TheRealName而不是therealname之外,我看不出有任何理由不这样做。

事实上,我甚至不会考虑使用不区分大小写的语言。