14

只是想知道为什么人们喜欢在编程语言中区分大小写?我不是想发起一场火焰战争,只是好奇而已。
就我个人而言,我从来没有真正喜欢过它,因为当我尝试过一种区分大小写的语言时,我发现我的工作效率会下降,请注意,我正在慢慢热身/习惯它,因为我更多地使用 C# 和 F#我曾经。

那你为什么喜欢它?

干杯

4

25 回答 25

32

一致性。如果“foo”、“Foo”、“fOO”和“fOo”被认为是相同的,则代码更难阅读。

有些人会用全部大写字母写所有内容,从而降低可读性。

根据大写约定,区分大小写使得以不同方式使用“相同名称”变得容易,例如,

Foo foo = ...  // "Foo" is a type, "foo" is a variable with that type
于 2008-10-03T02:45:22.737 回答
8

VB.NET 的一个优点是,尽管它不区分大小写,但 IDE 会自动将所有内容重新格式化为您正在使用的标识符的“官方”大小写 - 因此易于保持一致,易于阅读。

缺点是我讨厌 VB 风格的语法,更喜欢 C 风格的运算符、标点符号和语法。

在 C# 中,我发现我总是按 Ctrl-Space 以节省必须使用正确的类型。

仅仅因为您可以命名仅因情况而异的事物并不意味着这是一个好主意,因为如果其中很多泄漏到更大的范围内,可能会导致误解,因此我建议在应用程序或子系统中避免使用它-级别,但只允许在函数、方法或类内部使用它。

于 2008-10-03T03:16:21.493 回答
5

区分大小写不会强制编码样式或一致性。如果你对常量进行帕斯卡大小写,编译器不会抱怨。它只会强制您每次使用它时都使用帕斯卡大小写。我个人觉得不得不尝试区分两个仅在大小写上有所不同的项目是令人恼火的。在很短的代码块中很容易做到,但在非常大的代码块中很难保持直截了当。另请注意,人们实际上可以使用区分大小写而不发疯的唯一方法是,如果他们都严格遵循相同的命名约定。增加值的是命名约定,而不是区分大小写。

于 2008-10-03T03:11:18.183 回答
3

我为我的公司维护了一个内部编译器,并且很想把它变成一个混合体——你可以使用你想要的任何大小写作为标识符,你必须用相同的大小写来引用它,但是用相同的名称命名其他东西并且不同的情况会导致错误。

暗淡 abc = 1
Dim y = Abc - 1 ' 错误,大小写不匹配 "abc"
Dim ABC = False ' 错误,无法重新声明变量“abc”

它目前不区分大小写,所以我可能可以修复一些现有的错误,而且没有人会抱怨太多......

于 2008-10-03T03:47:04.930 回答
3

许多喜欢区分大小写的人误解了区分大小写的含义。

VB .NET 不区分大小写。这并不意味着您可以将变量声明为 abc,然后将其称为 ABC、Abc 和 aBc。这意味着如果您将其键入为其他任何一个,IDE 将自动将其更改为正确的形式。

不区分大小写意味着您可以键入

dim a as string

VS 会自动将其更改为正确大小写的

Dim a As String

实际上,这意味着您几乎不需要按 Shift 键,因为您可以输入所有小写字母并让 IDE 为您更正。

但是 C# 在这方面并没有以前那么糟糕。C# 中的 Intellisense 比 VS 2002 和 2003 中的更加激进,因此击键计数下降了很多。

于 2008-10-03T04:28:12.243 回答
3

这里有很多答案,但令我惊讶的是,没有人指出同样取笑 stackoverflow 竞争对手的明显例子:

expertSexChange != expertsExchange

当您使用驼峰式大小写变量名称时,大小写非常重要。

于 2011-01-13T18:55:05.427 回答
2

我相信它可以强制执行一致性,从而提高代码的可读性,并让您的眼睛更好地解析出各个部分。

class Doohickey {

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

使用大小写约定使代码对任何程序员来说都显得非常标准化。您可以轻松地挑选出类、类型和方法。如果有人可以以任何方式将其资本化,那就更难了:

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

并不是说人们会写出丑陋的代码,而是大写和标点规则使编写更易于阅读,区分大小写或大小写标准使代码更易于阅读。

于 2008-10-03T02:55:54.803 回答
2

我相信重要的是要理解区分大小写和可读性之间的区别,以正确回答这个问题。虽然使用不同的大小写策略很有用,但您可以在不区分大小写的语言中使用它们。

例如 foo 可以用作变量,而 FOO 在 java 和 VB 中都可以用作常量。VB 将允许您稍后键入 fOo 存在细微差别,但这主要是可读性问题,希望通过某种形式的代码完成来修复。

当您想要拥有对象的实例时,可能会非常有用。如果您使用一致的命名约定,则可以很容易地查看对象的来源。

例如: FooBar fooBar = new FooBar();

当只需要一个类型的对象时,可读性会显着提高,因为对象是什么一目了然。当需要多个实例时,您显然必须选择新的(希望是有意义的名称),但在小的代码段中,使用带有小写首字符的类名而不是像 myFooBar、x 或其他一些你会忘记它的作用的任意值。

当然,所有这些都是一个上下文问题,但是在这种情况下,我会说 9 次中的 10 次它得到了回报。

于 2008-10-03T03:54:36.287 回答
1

它为您提供了更多选择。

铃铃铃

都是不同的。

此外,它驱使刚被雇用的新手们试图找出总数不正确的原因;o)))

于 2008-10-03T02:41:51.640 回答
1

因为现在您实际上必须以一致的方式键入所有内容。然后事情突然开始变得有意义。

如果你有一个体面的编辑器——一个具有 IntelliSense 功能的编辑器或具有另一个名称的相同功能——你应该不会有任何问题来找出区分大小写的名称。

于 2008-10-03T02:46:20.880 回答
1

区分大小写是疯狂的!什么样的疯狂程序员会在同一个范围内使用名为 foo、foO、fOo 和 fOO 的变量?你永远不会让我相信区分大小写是有原因的!

于 2008-10-03T03:25:19.460 回答
1

我认为这里还涉及心理学问题。我们是程序员,我们对事物进行细微的区分。a与 ASCII 值不同A,当我的编译器认为它们相同时,我会感到奇怪。这就是为什么,当我输入

(list 'a 'b 'c) 

在 LISP 中(在 REPL 中),它以

(A B C)

我的脑海里立刻惊呼‘这不是我说的!'。当事情不一样时,它们不同的,必须这样考虑。

于 2008-10-03T04:15:48.467 回答
1

我通常会在假期花一些时间在 Delphi 编程上,而其他大部分时间我只使用 C++ 和 MASM。有一件事很奇怪:当我在 Delphi 上时,我不喜欢区分大小写,但是当我在 C++ 上时——我喜欢。我喜欢区分大小写,因为它使相似的词(函数、变量)看起来相似,我喜欢不区分大小写,因为它不会对语法施加过多的限制。

于 2008-10-08T17:26:19.117 回答
1

来自 .NET Framework Developer's Guide Capitalization Conventions,区分大小写:

大写指南的存在只是为了使标识符更易于阅读和识别。大小写不能用作避免库元素之间名称冲突的方法。

不要假设所有编程语言都区分大小写。他们不是。名称不能仅因大小写而异。

于 2009-02-14T18:35:00.857 回答
0

它对于区分代码中的类型很有用。

例如在 Java 中:如果它以大写字母开头,那么它可能是一个类。如果它的 ALL_CAPS 它可能是一个常数。

它提供了更多的多功能性。

于 2008-10-03T02:43:49.480 回答
0

感觉像是一种更专业的编码方式。不应该需要编译器来弄清楚你的意思。

于 2008-10-03T02:45:14.720 回答
0

很久以前,当我更多地使用 VB3/4 时,我的感觉和你一样。现在我主要在 C# 中工作。但是现在我发现 IDE 在查找符号方面做得很好,并在不同的情况下提供了良好的智能感知。它还为我自己的代码提供了更大的灵活性,因为我可以对具有不同情况的项目有不同的含义,我现在做了很多。

于 2008-10-03T02:47:30.673 回答
0

恕我直言,这完全是一个习惯问题。无论你习惯哪一种,都会显得自然而正确。

你可以想出很多理由来解释它的好坏,但没有一个站得住脚。例如:

  • 你会得到更多可能的标识符,例如。foo对比Foo对比FOO_
  • 但是只有在情况下才不同的标识符不是一个好主意
  • 您可以将类型信息编码为名称(例如,FooBar=typename、fooBar=function、foo_bar=variable、FOO_BAR=macro)
  • 但是你无论如何都可以用匈牙利符号来做到这一点
于 2008-10-03T02:47:44.963 回答
0

如果您在引用文件名区分大小写的 Linux 中工作,这也是一个好习惯。我不得不移植一个 Windows ColdFusion 应用程序才能在 Linux 中工作,这简直是一场噩梦。还有一些数据库开启了区分大小写功能,想象一下那里的乐趣。

不管平台如何,这是一个好习惯,并且肯定会导致更一致的开发风格。

于 2008-10-03T02:52:44.950 回答
0

因为这也是自然语言的工作方式。

于 2008-10-03T04:31:49.270 回答
0

在编程中,需要注意区分大小写,例如有一个公共属性 Foo 和一个相应的私有/受保护字段 foo。使用 IntelliSense,不犯错误并非难事。

然而,在操作系统中,区分大小写简直太疯狂了。我真的不想在同一个目录中有一个文件 FoofoofOO 。每次我在做 *nix 的东西时,这让我发疯。

于 2008-10-03T10:20:41.500 回答
0

对我来说,区分大小写只是对诸如 thisValue 用于参数和 ThisValue 用于公共属性或函数之类的范围的一种游戏。

您经常需要在不同的范围内使用相同的变量名(因为它代表相同的事物),并且区分大小写可以帮助您在不使用前缀的情况下做到这一点。

唷,至少我们不再使用匈牙利符号。

于 2008-10-03T10:46:11.450 回答
0

在使用旧的 VBScript ASP 代码多年后,当我们迁移到 .NET 时,我们选择了 C#,主要原因之一是区分大小写。旧代码是不可读的,因为人们没有遵循任何约定:代码是一团不可读的混乱(好吧,糟糕的 VBScript IDE 对此有所帮助)。

在 C# 中,我们可以定义命名约定,每个人都必须遵守它们。如果某些东西大小写不正确,您可以重命名它(使用重构,但这是 IDE 功能)并且不会有任何问题,因为类或变量将在整个代码中以相同的方式命名。

最后,我认为如果所有内容都正确大小写,它的可读性会更高。也许在不区分大小写的情况下编写会更快,但从代码审查和维护的角度来看,这不是最好的事情,因为跳过代码来寻找东西更容易。例如,foo一目了然地找到所有字符串比查找foo, Foo, FOO, FOo...更容易

于 2009-11-17T09:35:12.043 回答
0

不区分大小写的语言不容易推广到非 ASCII 字符集。对英语以外的语言进行适当的大小写转换不是一项简单的任务,并且取决于系统区域设置等。

于 2011-01-13T20:03:33.843 回答
0

不区分大小写非常困难,除非您将语法限制为 ascii(或仅对 ascii 字符应用不区分大小写),并且您还需要限制语言环境。

确定字符大小写的规则既没有很好的定义,也不是无损的。

一些字符可以有多个“小写”形式。有些人会不同意正确的大写形式应该是什么。

(某些语言和环境允许在名称中使用几乎字符)

考虑在 C# 中 ToUpper() 和 ToUpperInvariant() 有什么区别?

于 2012-01-18T07:47:19.163 回答