为什么人们喜欢大小写敏感性?

15

为什么有些人喜欢编程语言区分大小写?我不是想引发战争,只是好奇。
个人而言,我从未喜欢过这种特性,因为每当我尝试使用区分大小写的语言时,我的生产力都会下降。不过现在我正在更多地使用C#和F#,并逐渐习惯它们。

那么你为什么喜欢它呢?

谢谢。


1
在 Visual Studio 中使用 IntelliSense,这会成为一个问题吗? - Ed S.
我只是在一般性地谈论。 - Nathan W
当你错误地拼写或大小写变量时,很容易使用智能感知在以后的任何地方复制这个错误。 - xan
等等等等...C# 是不区分大小写的?我以为只是 Intellisense 把所有东西都变成了正确的大小写。这是否意味着以下代码是合法的?Foo bar; foo baz = bAR; Bar = BAZ; - Cheezmeister
1
我很惊讶这个问题还没有被关闭,因为那些过于热衷于操作的版主或成员会对任何不是100%客观的东西进行负面评价。 - puk
我特别惊讶,没有人提到本地化。 - Arafangion
25个回答

33

一致性。如果将 "foo"、"Foo"、"fOO" 和 "fOo" 视为相同,则代码更难阅读。

有些人会将所有内容都写成大写,使得阅读起来更加困难。

大小写敏感性可以根据大写约定以不同的方式使用 "相同的名称",例如:

Foo foo = ...  // "Foo" is a type, "foo" is a variable with that type

4
我经常发现自己在同样的10行代码中同时使用_foo、foo和Foo,尤其是在C#的构造函数和属性中。 - Matthew Scharley
8
并不是每个人都认为“Foo foo = FOO;”是一种特性。 - Mike F
2
自从我基本上永久地从VB转到C#之后,不区分大小写是我想念的一件事。正如其他人在这里所说的,如果您只通过单个大小写差异来区分标识符,那么通常会更容易出错。 - AR.
5
你刚刚描述了我不喜欢大小写敏感的原因。人类是自然语言解释者,而不是 ASCII 解析器。通过更改大小写来重载符号的功能可能会被我们有缺陷的大脑轻易误解,并导致更多容易出错的代码。 - Bob Probst
2
@TickyNixon 我邀请您审查我们旧的ASP VBScript代码。之后,您对大小写敏感性的看法可能会有很大改变。这个特性强制执行约定,我认为这总是很好的。 - Marc Climent
显示剩余6条评论

9
VB.NET的优点是尽管它不区分大小写,但IDE会自动将你使用的标识符重新格式化为“官方”大小写,因此易于保持一致性和易于阅读。
缺点是我讨厌VB风格的语法,更喜欢C风格的操作符、标点符号和语法。
在C#中,我发现我总是按Ctrl-Space键,以免使用正确的类型。
仅仅因为你可以命名只有大小写不同的东西,并不意味着这是一个好主意,因为如果大量使用这种方式泄露到更大的范围中,可能会导致误解,因此我建议在应用程序或子系统级别上避免使用它,但只允许在函数、方法或类内部使用。

1
如果你建立了一个让白痴都能编写代码的系统,那么你将会得到很多白痴在编码。VB就是这样一个系统。问题在于,虽然他们都可以把小部件粘贴到表单上,但他们无法完成工作,而这通常要等到试用期结束才会发现。 - Peter Wone
我使用过的VB版本有时会选择更改代码中所有其他实例的大小写以匹配您刚刚键入的内容,而不是更改您刚刚键入的内容以匹配其余部分,这似乎更合乎逻辑。我不知道他们是否在后续版本中修复了这个问题。 - Mark Baker
是的,通用字符大小写转换自 VB 7 (.NET 1.0) 版本以来已经修复。 - Jonathan Allen
即使在VB.NET之前,它也会使用最新版本。我完全不想念VB,但我几乎希望C# IDE能够立即将我放在正确的情况下,而无需使用Ctrl-Space - 在旧的C语言时代,我不必使用无法全部记住的数百个不同框架。热爱智能感应。 - Cade Roux

5

大小写敏感性不强制编码风格或一致性。如果你将一个常量使用帕斯卡命名法,编译器不会抱怨。它只会强制你每次使用它时都使用帕斯卡命名法。我个人觉得必须在两个仅有大小写区别的项目之间进行区分很烦人。在简短的代码块中容易做到,但在非常大的代码块中保持清晰则非常困难。另外要注意的是,人们想要使用大小写敏感性,必须严格遵循相同的命名约定。命名约定增加了价值,而不是大小写敏感性。


3

这里有很多答案,但我惊讶地发现没有人指出一个明显的例子,它还嘲笑了一个 StackOverflow 的竞争对手:

expertSexChange != expertsExchange

当您使用驼峰命名变量时,大小写很重要。


3
我为公司维护一个内部编译器,考虑将其改为混合模式 - 您可以使用任何大小写来命名标识符,但必须以相同的大小写方式引用它,如果您使用不同大小写的相同名称来命名其他内容,则会导致错误。
Dim abc = 1
Dim y = Abc - 1 ' 错误,大小写不匹配 "abc"
Dim ABC = False ' 错误,无法重新声明变量 "abc"
目前它是大小写不敏感的,所以我可能可以修复少数现有的错误,没有人会太过抱怨...

这是一个好主意,但如果没有集成开发环境的支持可能会很烦人。 - Dan Goldstein

3
许多喜欢区分大小写的人误解了大小写不敏感的含义。
VB .NET是大小写不敏感的。这并不意味着您可以将变量声明为abc,然后稍后将其称为ABC、Abc和aBc。它意味着如果您以任何其他形式输入它,IDE会自动将其更改为正确的形式。
大小写不敏感意味着您可以键入:
dim a as string

并且VS将自动更改为正确的大小写

Dim a As String

在实践中,这意味着你几乎不需要按Shift键,因为你可以全部小写输入,然后让IDE自动更正。但是C#现在已经不像过去那么糟糕了。C#的智能感知比VS 2002和2003时期要积极得多,因此击键次数大大减少。

1
这假定你是使用一个IDE。 :) - Jason Baker
如果你是一个纯文本编辑器VB .NET开发人员,你有权对这个工作方式感到不满。 :) - Ryan Lundy
2
如果你是一个使用记事本的.NET开发人员,那么你需要被锁在一个漂亮的软垫房间里。 - gbjbaanb
3
实际上,VB是“纠正大小写”的,而不是“不区分大小写”。 - Tom A
3
实际上,两种方式都可以。您可以将关键字全大写或全小写,并且VB .NET会构建和运行得很好。我很难想到在VB .NET中大小写有所区别的情况。顺便说一句,您可以在这里看到一个有趣的示例,展示了使用全小写关键字的VB .NET代码:http://www.panopticoncentral.net/archive/2007/07/20/21212.aspx。 - Ryan Lundy
虽然对于我来说还是有点啰嗦,但已经好多了。让我想起了 Lua。 - RCIX

2

大小写敏感太疯狂了!什么样的疯狂编码者会在同一作用域中使用变量foo,foO,fOo和fOO?你永远无法说服我存在大小写敏感的理由!


3
当然没有人会这样做。但是,通过区分大小写,你可以轻松区分“foo”变量和“Foo”类的差异,并在相同范围内同时使用它们(Foo foo = new Foo())。 - Fortega

2
我认为你了解大小写敏感和可读性的区别非常重要,才能正确回答这个问题。虽然具有不同的大小写策略很有用,但您可以在不区分大小写的语言中使用它们。
例如,在Java和VB中,foo可以用作变量,而FOO可以用作常量。VB会允许您稍后键入fOo,但这主要是可读性的问题,并希望通过某种形式的代码完成来解决。
当您想要拥有对象的实例时,命名一致性可能非常有用。如果您使用一致的命名约定,那么很容易看出您的对象来自哪里。
例如: FooBar fooBar = new FooBar();
当只需要一个类型的对象时,可读性显着提高,因为立即就能看出对象是什么。当需要多个实例时,您显然必须选择新的(希望有意义的名称),但在小的代码段中,使用类名以小写字母开头而不是像myFooBar、x或其他任意值的系统,这样做非常有意义,因为您会忘记它的作用。
当然,所有这些都是上下文的问题,但在这种情况下,我会说在10次中有9次是值得的。

2

我认为它强制执行一致性,提高了代码的可读性,并让你的眼睛更好地解析出代码块。

class Doohickey {

  public void doSomethingWith(string things) {
     print(things);
  }
}

使用大小写规范可以使代码对任何程序员都具有很高的标准化程度。您可以轻松地选择类、类型和方法。如果每个人都可以以任何方式进行大写,那么这将更加困难:

Class DOOHICKEY {
  Public Void dosomethingwith(string Things) {
    Print(things);
  }
} 

并不是说人们会写丑陋的代码,但就像大小写和标点符号规则使得写作更易于阅读一样,大小写敏感或者大小写约定使得代码更易于阅读。


2
大小写约定和大小写敏感性是不同的。虽然我同意大小写约定,但没有理由让C#不能像VB一样聪明地改变标识符的大小写。 - Jonathan Allen

1

它会给你更多的选项。

Bell bell BEll

都是不同的。

此外,这会让刚被聘用的新手们疯狂地想知道为什么总数不对 ;o)))


是的,但使用仅在大小写上不同的标识符确实是糟糕的编程实践。 - Mike F
哦,当然!我自己也不会这样做。这会让支持变得非常困难;新员工的事情实际上更多是开玩笑。然而,在像MUMPS这样简洁的环境中工作时,拥有这种灵活性非常重要。 - Keng
1
如果您正在使用MUMPS,大小写敏感性将是您最不用担心的问题。 - Adam Lassek
@Adam Lassek 哈哈哈!!!确实! - Keng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接