人们为什么喜欢区分大小写?

时间:2008-10-03 02:40:08

标签: c# case-sensitive

只是想知道为什么人们喜欢编程语言中的区分大小写?我并没有试图开始一场火焰战,只是好奇这一切 我个人从来没有真正喜欢它,因为我发现我的生产力下降,因为我尝试过一种具有区分大小写的语言,请注意我现在慢慢升温/习惯它现在我正在使用C#和F#更多然后我曾经。

那么你为什么喜欢它?

干杯

25 个答案:

答案 0 :(得分:31)

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

有些人会在所有大写中写下所有内容,使得一切都无法读取。

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

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

答案 1 :(得分:8)

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

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

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

仅仅因为你可以根据具体情况命名不同的东西并不意味着它是一个好主意,因为如果大量漏洞泄漏到更大的范围,它可能会导致误解,所以我建议在应用程序中避开它或子系统级别,但仅允许它在内部用于函数或方法或类。

答案 2 :(得分:5)

区分大小写不会强制执行编码样式或一致性。如果pascal case为常量,编译器不会抱怨。每次使用它时,它都会强制您使用pascal case键入它。我个人觉得必须尝试区分两种只有不同情况的项目才会令人恼火。在一小段代码中很容易做到,但很难直接在一个非常大的代码块中。另外请注意,人们实际上可以使用区分大小写的唯一方法是,如果他们都严格遵循相同的命名约定。这是增加值的命名约定,而不是区分大小写。

答案 3 :(得分: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中的Intellisense更具攻击性,因此击键次数下降了很多。

答案 4 :(得分:3)

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

Dim abc = 1
Dim y = Abc - 1 ' error, case doesn't match "abc"
Dim ABC = False ' error, can't redeclare variable "abc"

它目前不区分大小写,所以我可以解决现有的几个错误,没有人会抱怨太多......

答案 5 :(得分:2)

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

expertSexChange != expertsExchange

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

答案 6 :(得分:2)

我认为您必须了解区分大小写的区别与正确回答此问题的可读性之间的区别。虽然使用不同的套管策略很有用,但您可以使用不区分大小写的语言。

例如,foo可用于变量,FOO可用作java和VB中的常量。 VB稍后会允许您输入fOo,但这主要是可读性问题,希望通过某种形式的代码完成来修复。

当您想要拥有对象的实例时,最有用的是什么。如果使用一致的命名约定,则可以很容易地看到对象的来源。

例如: FooBar fooBar = new FooBar();

当只需要一个类型的一个对象时,可读性显着增加,因为它立即显现出对象是什么。当需要多个实例时,你显然必须选择新的(希望有意义的名称),但是在小代码部分中使用带有小写第一个字符的类名而不是像myFooBar,x这样的系统或者很有意义。一些其他的任意值,你会忘记它的作用。

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

答案 7 :(得分:2)

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

class Doohickey {

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

使用大小写约定会使代码对任何程序员都显得非常标准化。您可以轻松地选择类,类型和方法。如果任何人都可以以任何方式利用它,那将会更加困难:

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

并不是说人们会编写丑陋的代码,但大写和标点符号规则使编写更容易阅读,区分大小写或套管标准使代码更容易阅读。

答案 8 :(得分:1)

它为您提供了更多选择。

贝尔 钟 钟

都不同。

此外,它驱动刚刚雇用坚果的新手试图找出为什么总数不正确; o)))

答案 9 :(得分:1)

我通常花一些时间在度假时使用Delphi编程,而大多数时候我只使用C ++和MASM。有一点很奇怪:当我使用Delphi时,我不喜欢区分大小写,但是当我使用C ++时 - 我会这样做。我喜欢区分大小写,因为它使类似的单词(函数,变量)看起来很相似,而且我喜欢非区分大小写,因为它没有对syntaxis施加过多的限制。

答案 10 :(得分:1)

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

(列出'a'b'c)

在LISP中(在REPL中),它以

响应

(A B C)

我的脑海里立即惊呼'那不是我说的!'。 当事情不一样时,他们 是不同的,必须考虑......

答案 11 :(得分:1)

区分大小写是疯狂的!什么样的疯狂编码器会在同一范围内使用名为foo,foO,fOo和fOO的变量?你永远不会让我相信存在区分大小写的原因!

答案 12 :(得分:1)

从 .NET Framework开发人员指南 Capitalization Conventions,案例敏感度:

  

存在资本化指引   仅仅是为了使标识符更容易   阅读并认识。套管不能   用作避免名字的手段   库元素之间的冲突。

     

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

答案 13 :(得分:1)

因为现在你实际上必须以一致的方式输入所有内容。事情突然变得有意义了。

如果您有一个不错的编辑器 - 一个具有IntelliSense功能的编辑器或另一个名称相同的编辑器 - 您不应该在识别区分大小写的名称时遇到任何问题。

答案 14 :(得分:0)

使用传统VBScript ASP代码工作多年后,当我们转向.NET时,我们选择了C#,其中一个主要原因是区分大小写。旧的代码是不可读的,因为人们没有遵循任何惯例:代码是一个难以理解的混乱(好吧,糟糕的VBScript IDE帮助了)。

在C#中,我们可以定义命名约定,每个人都必须遵循它们。如果某些东西没有正确装入,你可以重命名它(通过重构,但这是一个IDE功能)并且没有任何问题,因为类或变量在整个代码中的命名方式相同。

最后,如果一切都正确套装,我认为更具可读性。也许在没有区分大小写的情况下编写速度更快,但是从代码审查和维护点开始并不是最好的事情,因为跳过代码查找内容更容易。例如,比查找'foo','Foo','FOO','FOo'......更容易找到所有'foo'字符串...

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

确定字符大小写的规则既没有明确定义,也没有无损。

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

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

考虑In C# what is the difference between ToUpper() and ToUpperInvariant()?

答案 17 :(得分:0)

对我来说,区分大小写只是对于参数的thisValue和公共属性或函数的ThisValue这样的范围。

通常,您需要在不同的范围内使用相同的变量名称(因为它代表相同的事物),并且区分大小写可以帮助您在不使用前缀的情况下执行此操作。

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

答案 18 :(得分:0)

在编程中,可以说区分大小写,例如具有公共属性Foo和相应的私有/受保护字段foo。使用IntelliSense,不会犯错误并不是很难。

然而,在操作系统中,区分大小写只是疯狂。我真的不想在同一目录中有一个文件Foo foo fOO。每当我做* nix的东西时,这就让我变得很困难。

答案 19 :(得分:0)

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

答案 20 :(得分:0)

如果您在Linux中使用引用文件名区分大小写,那么这也是一个好习惯。我不得不移植一个Windows ColdFusion应用程序在Linux上工作,这是一个彻头彻尾的噩梦。还有一些数据库启用了区分大小写,想象那里的快乐。

不管平台如何,这都是好习惯,并且肯定会带来更加一致的发展风格。

答案 21 :(得分:0)

恕我直言,这完全是一个习惯问题。无论你习惯哪一个看起来都是自然而正确的。

你可以提出充分的理由来说明为什么它的优点或缺点,但它们都没有多少水。例如:

  • 您可以获得更多可能的标识符,例如。 foo vs Foo vs FOO
  • 但是,只有大小写不同的标识符不是一个好主意
  • 您可以将type-in​​fo编码为名称(例如FooBar = typename,fooBar = function,foo_bar = variable,FOO_BAR = macro)
  • 但是你可以用匈牙利符号来做到这一点

答案 22 :(得分:0)

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

答案 23 :(得分:0)

感觉像是一种更专业的编码方式。不应该让编译器弄明白你的意思。

答案 24 :(得分:0)

它可用于区分代码中的类型。

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

它提供了更多功能。