7

任何人都可以为区分大小写提供一个很好的案例(:-))吗?

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

更糟糕的部分:在像 VB.NET 这样的语言中使用的 XML区分大小写的。

我认为这是荒谬的,并且只有在我们发现系统中的错误之后才会造成伤害,因为 XML 同时具有​​和节点......

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

“也许你可以提出一个论点来说明为什么不区分大小写是这样一个世界中的正确选择?”

这是一个示例:我认为它类似于以下问题:URL 应该区分大小写吗?www.cnn.com <> www.cnn.com ? 当然他们应该是一样的,身份盗窃天堂!因为人类不会过多关注两个相同但可能具有不同外壳的字符串。程序员是人。所以 getAge() 和 getage() 在大多数人的心目中是一样的。


请注意:我不认为我们希望代码实际上有一个定义为 getAget() 的函数,然后有代码调用它 getage(),VS (vb.net) 会自动将 getaget 更正为 getAge。所以代码很清晰,程序员知道正确的大小写。我的观点是:好的 IDE 使问题变得无关紧要,但它在像 vb.net 这样不区分大小写的语言中效果更好,然后让我们说 c#。参考:这里

4

7 回答 7

11

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

老实说,这很简单。您希望编译器在您打错字时纠正您,还是希望它猜测您的意思?正如您所发现的,后者会导致错误。VB 假定“哦,您可能是同样的意思,没关系,我们不会阻止您”,而 XML 就从字面上理解了您。

您的错误不是因为区分大小写不好而发生的,而是因为马虎是不好的。随意改变大小写最多可能不会导致问题,最坏的情况会导致错误。假设最坏的情况,并与您的情况保持一致。顺便说一句,这就是区分大小写的语言强迫你做的事情。无论您的工具是否区分大小写,程序员都应该区分大小写。只要世界具有不敏感和敏感的工具,区分大小写就会为您节省很多麻烦。如果我们可以改造这个世界,让一切都不区分大小写,那么很多支持区分大小写的理由就会消失。但我们不能。

当然要注意一点:在许多语言中,给变量和类型赋予相同的名称是很常见的,但大小写不同:

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

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

最后要考虑的一点:

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

顺便说一句,这里有一个很好的例子,说明您可以在区分大小写的语言中遇到有趣的惊喜。

于 2009-05-21T22:17:20.987 回答
4

Slop 在编程语言中从来都不是一个好主意。您希望事情尽可能具体。你永远不希望你的语言猜测任何事情,它应该允许尽可能少的方法来解决给定的问题。

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

我想不出任何理由允许忽略大小写。

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

编辑:我可能应该从免责声明开始:

大约 18 年前,我学会了基础编程,并短暂地产生了同样的想法。相信我,这是你在 20 年后回顾的那些事情之一,然后说“哦,是的,我错了”(就像我现在一样)

于 2009-05-21T22:11:44.930 回答
2
  1. 历史这是它已经完成的方式。XML 是 VB.NET 区分大小写的,因为 XML 标准要求它
  2. 国际化 我们是否要支持所有语言(法语、日语、希伯来语、克林贡语等)的大小写?
于 2009-05-21T22:07:33.393 回答
2

现在有几种区分大小写的语言是这样的,因为它们所基于的语言是区分大小写的,并且转换会更容易。就我个人而言,我更喜欢区分大小写,但 Jeff Atwood 写了一篇很好的文章,说明为什么不再需要区分大小写。

于 2009-05-21T22:10:32.933 回答
2

几个原因。

  • 在不区分大小写的情况下查找东西我必须到处都有“不区分大小写”的标志。使用 UTF-8 也应该知道 Klingon smallcase..

  • 更重要的是,CamelCasing,CAMelcaSing。它并不漂亮,但它被大量使用并且相当理智。不区分大小写几乎是不可能的。

  • 语言奇偶校验,例如 xsd.exe(与 VS200x 一起提供)可以为您提供的 xsd 生成类。当你也有“价值”时,你的“价值”会是什么?因此,这消除了另一个可能的阻抗。

于 2009-05-21T22:17:12.530 回答
1

大小写在编程语言中很好用,但与其在符号名称中使用它不如在符号名称中使用它,我们应该按照最初的意图使用它——分隔句子或命令或专有名称的开头。例如:

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

好漂亮啊。。。:P

于 2009-05-21T22:19:01.640 回答
0

我发现不区分大小写只是愚蠢的。您应该遵循原始声明的大小写。除了懒得打字TheRealName而不是therealname.

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

于 2009-05-21T22:07:18.637 回答