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

csm*_*mba 6 case-sensitive

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

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

更糟糕的部分:这是用来里面像VB.NET语言XML 区分大小写.

我正在做一个很荒谬的,只能造成伤害,我们发现在我们的系统中的错误是由于一个事实,即XML有后两者的情况下V ALUE和v ALUE节点...

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

"也许你可以提出一个论证,为什么不区分大小写是这样一个世界的正确选择?"

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


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

jal*_*alf 11

案例规则取决于文化.你一个编程语言,其中的变量i有时被认为是同一个叫I,有时它们是不同的变量?(这不是一个制造的例子,顺便说一句,在土耳其,I大写i.

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

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

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

Foo foo; // declare a variable foo of type Foo
Run Code Online (Sandbox Code Playgroud)

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

最后一点要考虑:

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

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

  • 但是假设一个*sane*程序员,首先不存在两个叫做getage(具有不同大小写)的函数.然后编译器会告诉您是否意外使用了错误的大小写.这里的好处是,它会立即告诉你*,而不是让问题传播,直到它到达*区分大小写的其他工具,例如XML,此时它不能再在编译时捕获,并成为一个错误,而不是一个简单的编译错误. (2认同)

Bil*_*l K 5

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

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

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

至少这是我的观点——但你的情况可能会有所不同。

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

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


Zif*_*fre 1

我发现不区分大小写很愚蠢。您应该遵循原始声明的大小写。除了懒得打字之外,我看不出有什么好的理由不这样TheRealNametherealname

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

  • @csmbe:区分大小写是否会减少工作量?这没有道理。您不会通过忽略原始声明来获得“更少的错误”,而是通过“遵循”它来获得“更少的错误”。您是否希望有一种语言能够自动更正常见的拼写错误,例如“teh”到“the”?以“生产力”的名义? (3认同)