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

Case sensitive Vs insensitive syntax

有人能为区分大小写写写写一个很好的例子(:-)吗?

C:区分大小写vb.net:不区分大小写C++:区分大小写…

更糟的是:在类似vb.net的语言中使用的XML区分大小写。

我认为这是荒谬的,只有当我们在系统中发现了一个bug后才会造成伤害,因为XML同时具有值和值节点…

我被问了一遍又一遍的评论

"Perhaps you can come up with a single
argument for why case insensitive is
the right choice in such a world?"

下面是一个例子:我认为它类似于:URL应该区分大小写?www.cnn.com<>www.cnn.com?当然他们应该是一样的,身份盗窃天堂!因为人类不太注意两条相同但可能有不同外壳的绳子。程序员是人。所以getage()和getage()在大多数人的头脑中是相同的。

请注意:我认为我们不希望代码实际上有一个定义为getaget()的函数,然后让调用它的代码getage(),vs(vb.net)会自动将getaget更正为getage。所以代码是清晰的,程序员知道正确的大写。我的观点是:好的IDE使问题不相关,但它在类似vb.net这样的非案例设置语言中工作得更好,然后让我们说c。参考文献:这里


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

说实话,这很简单。你想让编译器在你打字时纠正你,还是想让它猜中你的意思?正如您所发现的,后者会导致错误。vb假定"哦,你可能是指同一件事,没关系,我们不会阻止你",而XML则直截了当地将你理解为。

您的错误没有发生,因为区分大小写很差,它发生的原因是草率是不好的。任意改变情况,充其量可能不会造成问题,最坏情况下也会造成错误。假设最坏的情况,并与你的情况保持一致。顺便说一句,这就是区分大小写的语言强迫你做的。无论您的工具是否区分大小写,程序员都应该区分大小写。对大小写敏感可以省去很多麻烦,只要这个世界既不敏感又有敏感的工具。如果我们能改造世界,使一切都不区分大小写,那么许多支持敏感的理由就会消失。但是我们不能。

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

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

当然,你可以说"你不应该这样做",但这很方便,而且它会立即告诉读者变量的类型。它允许我们创建一个日志类和一个日志对象。因为这个对象的目的是记录日志,所以名称有点明显。

最后一点要考虑:

案例在真实语言中很重要。以大写开头的词与以小写开头的词不同。单词不是正确的英语。信息在案例中被编码,这使得文本更容易阅读。它告诉我们什么时候我们遇到一个名字,例如,什么时候开始一个句子,这很方便。允许人们忽略大小写规则会使文本更难阅读。既然代码一般都应该尽可能的可读,为什么我们不在编程中做同样的事情呢?允许案例编码重要信息。在许多语言中,Foo是一种类型,Foo是一个变量。这是重要的信息。我想在编程时知道这一点。如果我看到一个叫做"getage"的函数,我想知道这是否是我以前从未听说过的英语单词。但是当我看到"get age"时,我立刻知道它应该被理解为"get"一词,后面跟着"age"一词。

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


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

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

我想不出任何理由允许忽略这个案子。

至少这是我的观点——但你的里程数可能会有所不同。

编辑:我可能应该先声明一下:

我学会了基本编程,18年前也有过同样的想法。相信我,这是你20年后会回顾的事情之一,然后说"哦,是的,我错得很厉害"(就像我现在这样)。


有几个原因。

  • 找东西,不区分大小写,我必须在每个地方都有"不区分大小写"的标志。有了UTF-8,也应该知道克林贡的小写字母。

  • 更重要的是,骆驼壳,骆驼壳。它不漂亮,但是它使用得很频繁,而且很正常。几乎不可能不区分大小写。

  • 语言奇偶校验,例如xsd.exe(与vs200x一起提供)可以为您提供的xsd生成类。当你也有"价值"时,你的"价值"是什么?所以这就引出了另一个可能的阻抗。


现在有几种区分大小写的语言是这样的,因为它们所基于的语言是区分大小写的,而且转换更容易。我个人更喜欢区分大小写,但杰夫·阿特伍德写了一篇很好的文章,阐述了为什么不再需要区分大小写。


  • 历史就是这样。XML是vb.net,区分大小写,因为XML标准需要它
  • 国际化我们是否要支持所有语言的case(法语、日语、希伯来语、克林贡语等)?

  • case在编程语言中很好,但我们不应将其用于符号名,而是应按原意使用它来界定句首、命令或正确名称。例如:

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

    如此美丽,。。。P


    我觉得案件不敏感是愚蠢的。您应该遵循原始声明的大写。除了懒得输入TheRealName而不是TheRealName,我看不出有什么好的理由不这么做。

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