有人能为区分大小写写写写一个很好的例子(:-)吗?
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。参考文献:这里
- 关于制表符和空格的上一个参数尚未完成。
- 所以你说区分大小写很糟糕,因为你依赖于遵循不同约定的工具?为什么不说不敏感是坏的,因为vb没有捕捉到错误?
- 4票结束,但这个问题肯定是节目相关的。奇怪的一个。可能应该是社区维基…但没有关闭…
- 区分大小写是不好的,因为它会导致程序员编写错误,而这个线程中没有人给出任何向上的理由。你们都是支持区分大小写的,因为……因为…就是这样?
- 我认为这是一个完全正确的问题。+0到1。
- 你在要求一个论点:一个问题是"主观的和有争议的"是结束它的一个标准。
- @CSMBA:区分大小写不会导致程序员编写错误。动态语言与区分大小写相结合会导致程序员编写错误。这就是为什么我从不考虑为任何严肃的事情使用动态语言的原因。
- @CSMBA:不,区分大小写不能"导致程序员写错误"。不一致的案例规则可以。如果vb是区分大小写的,那么编译器就会捕捉到您的错误。你的错误是由1)XML和VB不同意区分大小写,2)编写代码的人马虎造成的。
- 对于你的编辑,投票结束不是"情绪化的",很明显这是"主观和争论性的"。这也是"不真实的问题",因为没有答案。
- 虽然我个人对这类问题没有问题(我有点喜欢它们),但如果你在SO字典中查到"主观和争论",你很可能会发现这个问题。
- 我认为这个问题的真正问题是它不是一个问题。你坚持自己的想法,没有答案会改变它。
- 我认为收集意见没有任何坏处(因为这也可能改变一个人的观点)。不管怎样,我的看法是:区分大小写会让每个人都看到同一页的大小写,这是件好事。我花了数年的时间编写帕斯卡代码,并对那些在大写字母中写"begin"的"b"的人产生了仇恨。它与其他编码约定几乎相同,但至少这个约定可以自动强制执行。关于区分大小写会导致很难发现错误的说法:不要在代码中使用相同的名称和不同的大小写。
- 作为对你第二次编辑的回应,我只是说这是虐待。名字召唤不会使你的十字军更加有效。如果你想要"情感的"、"精神的"或"没有提供任何理由",看看你自己的问题和评论。你已经下定决心了,你对大多数人为什么不同意你没有兴趣。他们错了,因为他们不同意你。当然,正如这个问题所显示的,没有一个好答案。这就是它关闭的原因。
- 我觉得你对黑手党这个词的使用很冒犯,但你的使用肯定与你的提问方式和你对答案的评论方式一致。如果你只是在寻求肯定,为什么还要问一个问题呢?
- 仅仅因为没有一个正确的答案并不意味着你不能有正反两面。你很协调,我有一个我已经明确的观点,但是我要求人们指出区分大小写的好处。告诉我,不区分大小写是因为懒惰的人不具备支持论点的资格,或者你认为是吗?
- @CSMBA:但是因为没有一个正确的答案,这个问题并不适合这个网站。没有人说"不区分大小写是为了懒惰的人",我们说"滥用它是懒惰的"。在你的例子中,滥用它会导致错误,这正是关键所在。在一个既有区分大小写工具又有不区分大小写工具的世界里,以及当不同语言有不同的大小写规则时,我们已经想出了为什么区分大小写是最安全的选择的原因。也许你能想出一个理由来解释为什么在这样一个世界里不区分大小写是正确的选择?我还没看到。
案例规则取决于文化。您是否需要一种编程语言,其中变量i有时被认为与名为i的相同,有时它们是不同的变量?(这不是一个虚构的例子,顺便说一句,在土耳其语中,i不是大写的i。
说实话,这很简单。你想让编译器在你打字时纠正你,还是想让它猜中你的意思?正如您所发现的,后者会导致错误。vb假定"哦,你可能是指同一件事,没关系,我们不会阻止你",而XML则直截了当地将你理解为。
您的错误没有发生,因为区分大小写很差,它发生的原因是草率是不好的。任意改变情况,充其量可能不会造成问题,最坏情况下也会造成错误。假设最坏的情况,并与你的情况保持一致。顺便说一句,这就是区分大小写的语言强迫你做的。无论您的工具是否区分大小写,程序员都应该区分大小写。对大小写敏感可以省去很多麻烦,只要这个世界既不敏感又有敏感的工具。如果我们能改造世界,使一切都不区分大小写,那么许多支持敏感的理由就会消失。但是我们不能。
当然是一点旁注:在许多语言中,通常赋予变量和类型相同的名称,但大小写不同:
1
| Foo foo; // declare a variable foo of type Foo |
当然,你可以说"你不应该这样做",但这很方便,而且它会立即告诉读者变量的类型。它允许我们创建一个日志类和一个日志对象。因为这个对象的目的是记录日志,所以名称有点明显。
最后一点要考虑:
案例在真实语言中很重要。以大写开头的词与以小写开头的词不同。单词不是正确的英语。信息在案例中被编码,这使得文本更容易阅读。它告诉我们什么时候我们遇到一个名字,例如,什么时候开始一个句子,这很方便。允许人们忽略大小写规则会使文本更难阅读。既然代码一般都应该尽可能的可读,为什么我们不在编程中做同样的事情呢?允许案例编码重要信息。在许多语言中,Foo是一种类型,Foo是一个变量。这是重要的信息。我想在编程时知道这一点。如果我看到一个叫做"getage"的函数,我想知道这是否是我以前从未听说过的英语单词。但是当我看到"get age"时,我立刻知道它应该被理解为"get"一词,后面跟着"age"一词。
顺便说一句,这里有一个很好的例子,你可以在区分大小写的语言中遇到有趣的惊喜。
- 实际上,区分大小写是编译器无法纠正您的输入错误的情况!你可以错误地在同一个类中有*getage()*getage()adn,那么这个类的可怜的用户就不知道该使用哪个了。或者他可能认为他称之为getage,在现实中称之为getage,并得到一个意想不到的结果。它从未在vb.net中发生过,因为它不会让我创建这样的两个函数。
- 但是假设一个健全的程序员,两个称为getage(大小写不同)的函数将不会首先存在。然后编译器会告诉您是否意外使用了错误的大写。这里的好处是,它会立即告诉您,而不是让问题传播到其他区分大小写的工具,如XML,在这种情况下,它在编译时不再被捕获,而是变成一个错误,而不是一个简单的编译错误。
- 编辑我的职位,再考虑几点。:)
- @关于"现实生活中的案件……"一节。我同意。我不认为这又是一个有利于语言区分大小写的观点。作为程序员,您可以在编写变量和代码时自由使用正确的英语规则。在vb.net中,如果您执行了一个名为getname()的函数,那么vb.net将强制使用函数的代码中的所有位置都是getname。漂亮不?在C情况下,您可以编写一个函数getname(),所有用户都将使用这个$%*。因此,事实上,这并不能证明区分大小写的lang'更好。
- 我没有说在编程时应该遵循英语的大小写规则(它们不是。我们甚至没有句子的概念,所以我们如何确定一个句子何时开始?)我说过区分大小写在实际语言中很有用。我要说的是,如果编译器没有执行正确的大小写,那么我们就不能再依赖于大小写传递的信息了。如果程序员"可以自由地遵循案例规则",那么您实际上是在说他也可以自由地打破这些规则。我不知道你的评论的后半部分是什么意思。
- 但我并不惊讶你没有考虑这个证据,有两个原因。首先,不存在"证据"。这只是一个有利于区分大小写的观点。这并不意味着一个比另一个更好,它只是意味着区分大小写至少有一个优势。第二,要接受这一点,你必须对这个问题保持开放。你已经很清楚地表明你不是。你已经下定决心了。
slop在编程语言中从来不是一个好主意。你希望事情尽可能具体。你永远不希望你的语言猜测任何事情,它应该允许尽可能少的方法来解决一个给定的问题。
对于一个具体的答案,可读性如何?StoreTrodata在视觉上与StoreTrodata有很大的区别吗?不是说有人会做这样的事,但允许这样做有什么意义呢?
我想不出任何理由允许忽略这个案子。
至少这是我的观点——但你的里程数可能会有所不同。
编辑:我可能应该先声明一下:
我学会了基本编程,18年前也有过同样的想法。相信我,这是你20年后会回顾的事情之一,然后说"哦,是的,我错得很厉害"(就像我现在这样)。
- 期望程序员记住他使用的名称是所有编程中最基本的概念。你怎么会记得这是"价值"这个词呢?设计不好吗?事实上,vb让你只记住名字的某些方面,这是很愚蠢的。为什么不记得前三个字母?所以value==val=valid?毕竟,记住名字是很愚蠢的。
- 一种语言的编程/命名约定将告诉您对于任何给定类型的标识符应该使用哪种情况。
- @工商管理硕士:是的,太草率了。当您的工具要求您这样做时,不遵循惯例是草率的。
- @贾夫:这与最初有这个"约定"的理由无关。
有几个原因。
找东西,不区分大小写,我必须在每个地方都有"不区分大小写"的标志。有了UTF-8,也应该知道克林贡的小写字母。
更重要的是,骆驼壳,骆驼壳。它不漂亮,但是它使用得很频繁,而且很正常。几乎不可能不区分大小写。
语言奇偶校验,例如xsd.exe(与vs200x一起提供)可以为您提供的xsd生成类。当你也有"价值"时,你的"价值"是什么?所以这就引出了另一个可能的阻抗。
- @CSMBA:同样的标记,允许用户在函数被定义为getage时调用getage(),这也为混淆和错误打开了一个案例。对于代码的读者来说,调用哪个函数可能并不明显。什么是度假?它不再像两个单词,这是最初的程序员的意图。
- CSMBA:我可能说得不好,但camelscaping也适用于名称空间和类名。所以刚好是foo.lower()==bar.lower()的名称空间+类名将发生冲突。还有像getaway()/getaway()这样的东西。
- vb.net将动态自动更正为getage()。这就是重点。它将帮助程序员不去关心其他人做了什么,为什么要这样做?你想要的只是年龄。getage、getage或getage都是相同的。
- 我会很高兴的,这就是我的观点:我想逃走()和逃走是一样的。名字也应该不区分大小写。就像url www.cnn.com和www.cnn.com应该去同一个地方一样。
- 但是为什么这两个URL应该指向同一个地方呢?我觉得它们不一样。你总是问事实的原因。看来你也有点缺。:)我同意,当IDE能够猜测和更正您的大小写时(C IDE与便利功能做同样的事情),这很好,但是如果IDE无论如何都要更正它,为什么您需要大小写不敏感?为什么不使用区分大小写的语言和一个能够猜测正确大小写(并纠正对getage的"getage"调用(如果函数是这样调用的话)的IDE,并动态地修复它呢?
- 网址:这是一个原因:人们(我妈妈)不会注意到她正试图登录花旗银行,而不是花旗银行。这使得身份证被盗更容易。(在这里,我给出了原因,我不是关于一场火焰战争)IDE自动更正:我同意好的IDE可以减少任何情况下的问题。我没说这是一场噩梦,我无法应付。我写了很多年C++,没有打扰我。但我不担心,我有理由认为它是好的。
现在有几种区分大小写的语言是这样的,因为它们所基于的语言是区分大小写的,而且转换更容易。我个人更喜欢区分大小写,但杰夫·阿特伍德写了一篇很好的文章,阐述了为什么不再需要区分大小写。
- 打我到编码恐怖参考!
- 那篇文章真可笑。这些参数都不适用于静态语言。使用动态语言只是另一个bug邀请
- 我必须同意齐弗关于那篇文章毫无进展的观点。它得出的结论是,案件不敏感是一个生产力杀手,只引用轶事证据。
历史就是这样。XML是vb.net,区分大小写,因为XML标准需要它
国际化我们是否要支持所有语言的case(法语、日语、希伯来语、克林贡语等)?
- 克林贡就是一个很好的例子。不同的大写字母可能会改变单词的含义。
- @CSMBA:第2点也是反对它的一个很好的理由。这并不矛盾。
- 不,2解释了为什么区分大小写是正确的。它避免了我们必须弄清楚一个字符是否是另一个字符的大写版本。案例规则非常复杂,而且不断变化。
- @CSMBA:我认为第二点是指不同的语言对案例的处理方式不同,这应该重新认识。因此,它们都支持区分大小写。关于第一点,我认为我们应该"从错误中吸取教训"!;)
- 顺便说一句,虽然克林贡的程序员很少(这使得这一点有点无意义),但许多土耳其程序员也存在,他们也有类似的问题("土耳其I问题")。谷歌IT。这是测试本地化的常用方法)
case在编程语言中很好,但我们不应将其用于符号名,而是应按原意使用它来界定句首、命令或正确名称。例如:
1 2 3 4
| Var test = 0;
Console.writeline(test);
Test = test + 1;
Console.writeline(test); |
如此美丽,。。。P
我觉得案件不敏感是愚蠢的。您应该遵循原始声明的大写。除了懒得输入TheRealName而不是TheRealName,我看不出有什么好的理由不这么做。
事实上,我甚至不会考虑使用不区分大小写的语言。
- 这很难成为支持区分大小写的语言的原因。所以,因为它是更多的工作(你说,否则你是懒惰的)是一个理由说它是好的吗?我认为生产力和更少的缺陷是目标。
- @CSMBE:区分大小写的工作会更少吗?这没有道理。忽略原始声明并不会得到"更少的bug",而是通过跟踪它来获得"更少的bug"。你想让一种语言自动更正常见的拼写错误吗,比如"teh"到"the"?以"生产力"的名义?
- 我认为这个答案不包含任何建设性的信息。提出的论点似乎非常主观。虽然我同意案例不敏感会引起错误而不是阻止它们,但我认为以一种文明和建设性的方式提出您的意见是很重要的。- 1
- @jalf:t.你想让一种语言自动地把"teh"等常见的拼写错误更正为"the"吗?实际上是的。正如百万的Word用户和Outlook用户所显示的那样。
- @CSMBA:关于teh和the,你在开玩笑吗?如果一种语言被创造出来,那么绝对没有人会使用它。
- 我没有说和teh应该相等。也许现在我们发现了我们的立场之间的差距。我说过,无论哪种方式,只要IDE自动更正(规范化),就没关系。这就是vb.net IDE将要做的,虽然getage和getage是相同的,但是IDE将规范化,并确保如果calss.func()被写为getage,无论您键入什么,IDE都会将其更改为getage。生活是美好的!
- @工商管理硕士:IDE悄悄地纠正你更愚蠢。这是编程,不是自然语言。