Person person = new Person()
OO语言编写类似的东西很普遍,其中符号“ person”是一个临时对象,“ Person”是一个类类型。
Person person = new Person()
OO语言编写类似的东西很普遍,其中符号“ person”是一个临时对象,“ Person”是一个类类型。
Answers:
尽管英语中的大小写折叠相当琐碎,但在其他一些语言中却要少得多。如果德国程序员使用ß
变量名,那么您将如何考虑大写字母呢?仅供参考,“ß” 仅用于小写字母。OTOH,“ ss” 是等效的-您是否认为编译器必须匹配它们?进入Unicode时,您会遇到更多有趣的问题,例如带有预组合变音符号的字符与单独组合变音符号的字符。然后,您将学习一些阿拉伯文字,用三种不同的形式包含许多字母,而不仅仅是两个。
在黑暗时代,大多数编程语言几乎都是出于区分大小写的。例如,Pascal开始于Control Data大型机,每个主机仅使用6位(总共64个代码)。大多数此类计算机使用“ CDC Scientific”字符集,其中仅包含大写字符。您可以切换到其他字符集,但是大多数字符集都使用大写或小写字母,但不能同时使用两种字符集,但是两者都使用相同的代码。古代的Baudot代码和在COBOL,FORTRAN,BASIC等初期都被认为是标准的情况也是如此。当功能更强大的硬件广泛可用时,它们对大小写不敏感的根深蒂固,以至于无法更改。
随着时间的流逝,不区分大小写的实际困难变得越来越明显,语言设计人员通常已决定(“实现”可能是一个更准确的术语),当/如果人们真的想要不区分大小写,则最好使用辅助工具来解决。比语言本身。
至少IMO,编译器应完全按照输入的方式进行输入,而不要确定“您编写了此内容,但我将假设您确实具有其他含义”。如果您希望进行翻译,则最好使用内置的工具将它们分开处理。
为什么有人要区分大小写?在什么情况下,能够VARIABLE
在一个位置,Variable
另一个位置和variable
第三个位置引用单个变量很有用?不区分大小写令人不快。我宁愿得到一个编译错误,当我不小心输入VAriable
代替Variable
,而不是让情况下,错别字一样,滑进我的代码。
总之,许多编程语言都具有区分大小写的功能,不仅出于历史/惯性原因,而且因为区分大小写是一个坏主意。
在Java情况下,不使用敏感度在代码中提供更多选项,而是使用非常清晰和一致的语义。类看起来像这样。objectsLookLikeThis。MethodsLookLikeThis()。STATIC_VARIABLES_LOOK_LIKE_THIS。Classes.WithInnerClassesLookThis。它不能提供更大的自由度:它允许您将一些信息简洁地打包成一种原本过于冗长的语言。
我认为在具有很多编译器和IDE支持的显式静态类型的语言中,区分大小写是一种很好的信息交流方式(例如Java)。对于像Ruby这样的语言,不区分大小写可能甚至会导致更多意外结果,尽管我愿意尝试不区分大小写的Ruby。
我认为严格的系统区分大小写不会混淆代码,但实际上会使代码更清晰。考虑可能的Java代码:
joe blah = new hUf();
这很清楚,但是关于:
hUf.WTF();
在Java中,您会自动知道这是什么。在不区分大小写的Java中,它是模棱两可的,因此您需要诉诸其他机制来区分类与实例,方法与包。这种机制可能会让您呕吐:)
我不认为它是“实现”的,而是“允许的”。区分大小写是字符串比较的默认状态。由于您需要添加额外的代码来执行不区分大小写的比较,并保留原始标记名称以进行正确的错误和警告报告,因此使编译器工程师使语言不区分大小写需要花费额外的精力。
这几乎肯定是为什么它以C结尾的原因。他们想制作一种简单的语言,以实现易用性为代价,但要牺牲可用性。至于为什么要用现代语言呢?因为它当然是用C语言编写的,所以它一定是正确的方法!</ sarcasm模式>
如果没有其他问题,它将简化解析过程,并允许您为变量/类名提供更多组合。
使用不区分大小写的解析,您将不得不使用唯一的标识符,因为“ myClass”和“ MyClass”将是同一件事。另外,您必须向解析器添加复杂性,以确保您可以根据上下文确定使用哪个标识符。
考虑这样的情况:
XmlWriter xmlWriter = new XmlWriter();
xmlWriter.Write("blah");
假设XmlWriter类还具有一个称为“ Write”的静态方法。如果没有在这里区分大小写,您是在实例还是在类上调用它?
write
和Write
是两种完全不同的方法,我会勒死某人。
我喜欢区分大小写,如果仅出于其他原因,它会使代码更具自说明性:
this is a CONSTANT
this is a ClassName
this is a methodName
this is a local variablename
我通常使用Python进行编程,但是回到我的C#时代,我发现将类实例的名称与该类的名称相同非常方便,但是使用小写(或驼色)的情况(正如其他人所说的那样):
Thing thing = new Thing();
使用不区分大小写的语言为此需要一些其他约定,即某种类似的符号:
Thing oThing = new Thing()
Thing instanceOfThing = new Thing()
这是一件“坏事”。
我还发现grep(区分大小写)查找对类的引用与对变量的使用非常方便。使用不区分大小写的语言,这将变得不那么容易。搜索和替换相同。
最后,作为一名程序员,当我看到带有不同大小写的单词时,我突然想到它们是不同的东西……我很少遇到变量大小写错误的错误,即使是在动态的脚本语言中,编译器也会提供帮助。
我认为对于像C#和Java这样的静态类型的语言,它实际上并没有增加任何价值。因为在大多数情况下,您都有一个IDE可以自动为您更正大小写不匹配的IDE,所以最终,如果我偶然输入“ VAriable”,我的IDE会将其自动更正为“对我来说可变”。再加上MyClass myClass;
样式约定,您可以看到区分大小写不一定是一件坏事。
对于动态类型的语言,可能会有更多的论点,因为IDE很难猜测自动更正,但是对于动态类型的语言,您已经有太多的担忧了(就错字),使用一致的大小写约定不会增加更多的负担。
所以,是的,尽管没有真正的原因语言可能并非是不区分大小写的,但也没有真正的理由,他们应该是要么。
Scott Hanselman的那篇关于“ SignOn”与“ Signon”的文章是关于字符串比较的,与编程语言无关。我同意用户键入的字符串应始终不区分大小写地进行比较,但是我认为这与编程语言中的标识符不同。
当一种语言区分大小写时,我会利用它来重现数学和科学中的常规案例用法。以下是一些案例约定的列表(绝不详尽):
f
通常表示概率密度函数(pdf),而大写字母F
表示相应的累积分布函数(cdf)。
X
,相应的小写字母表示它们的实现x
,如$ Pr [X = x] \ leq 0.05 $。
我只是认为这是由于Unix和C引起的-但这只是鸡和蛋的问题,只有geezer才能正确回答。
当我被问到它们是否早于鸡蛋时,我使用的理由是“复活节兔子来了”。因为诺亚方舟上有小鸡,所以小鸡排在第一位。因此,因为GCC在Unix上运行,所以Unix排在第一位,因此,因为Unix非常关心大小写,所以C及其所有变体和后代(是的,任何加花括号的东西都关心大小写)。
花括号和大小写敏感性之间也可能存在联系。
对于技术人员而言,“区分大小写”总是更好地减少歧义。以文件名为例。处理Windows文件名比Unix文件名麻烦得多,因为Windows中的文件名不区分大小写,而Unix中的文件名区分大小写。
回到编程。对于类名,方法名,变量名,大多数语言不强制执行命名样式规则。有时为了简化“反射”,我们可以简单地使用“区分大小写”名称绑定到其他数据源,而无需进行转换,或者处理相同名称但在不同情况下的问题。