为什么所有大写字母都被视为不良编码风格?

时间:2009-04-22 14:58:03

标签: coding-style

Jeff完成his post谈论这件事,但我没有理解。

那么,为什么你认为这是一种糟糕的编码风格?

编辑:

我和很多人一样,不认为这是一种糟糕的编码风格。但杰夫比我更好的程序员,如果我错了,他的观点会转过头来点亮我的回答。我是一名Delphi开发人员已有几年了,现在我正在成为一名C#开发人员,在Delphi中这是一种常见的做法。

18 个答案:

答案 0 :(得分:58)

所有大写是预处理器宏常量的传统C指定。将它们放在不同的命名空间中是非常有用的,因为预处理器将替换它找到名称的任何地方,无论范围如何。

杰夫使用的意义上的常量在语义上是一个无法改变的变量。它遵循所有范围原则和所有内容,并且在语义上与具有相同值的非const变量相同。

换句话说,

#define max_length 5

是一个问题,因为有人可能会在不同的上下文中使用max_length作为变量,而这通常是安全的,而

const int max_length = 5;

只是一个变量声明。因此,使用

有一个优势
#define MAX_LENGTH 5

因为惯例是只有预处理器常量是全大写的,所以它不会干扰任何其他用途。

答案 1 :(得分:30)

你会发现许多杰夫的陈述首先引起争议,准确性是次要问题。如果他的博客偶尔煽动性,那么他的博客就不那么受欢迎了。 (考虑Death to the Space Infidels的最后一行,“那就是说,只有白痴才会使用制表符来格式化他们的代码。”)这显然是主观的。不要把他所说的一切都视为真实和善良 - 这并不意味着。如果你不同意,请在评论中踢他的屁股,看看他是否回信。 :)

我认为ALL_CAPS_CONSTANTS是完美的:它们可以立即识别和熟悉。我的工作场所风格指南的一部分(我们没有那么多)是用大写字母写出所有静态常量。不要流汗;只需使用团队其他成员使用的任何内容。决定StudlyCapscamelCase vs SCREAMING_CAPS的决定值得花90秒讨论。

答案 2 :(得分:20)

尖叫很好。在常量的情况下,它告诉读者

  

不要在以后改变我   CODE

但我理解软程序员是否会受到冒犯。

答案 3 :(得分:9)

坦率地说,我认为编码风格不好。实际上,即使是官方Java代码样式也会使常量全部为大写(http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html),其他语言约定也是如此。

理论上,它更难阅读 - 我们人类喜欢使用可变高度的字母来提高阅读速度(我们可以从粗糙的单词形状和第一个/最后一个字母推断出很多信息)。但是,我对短句,所有大写短语都没有问题。它几乎没有“大喊大叫”(你编译器并不关心你有多粗鲁),并清楚地表明名称可能是可变的,而那些不是。

答案 4 :(得分:7)

我认为编码风格不好。也许是老式的,但也不错。它确实使常量从其他变量中脱颖而出。

答案 5 :(得分:5)

对我来说唯一令人信服的理由是风格的一致性。对于像Java / C ++这样的非.NET语言,所有大写常量当然都是可以接受的。

对于C#,标准是使用PascalCase,如下所示:C# naming convention for constants?

答案 6 :(得分:4)

所有大写都像是在向某人大喊。

答案 7 :(得分:3)

它也使代码更难以阅读

答案 8 :(得分:3)

嗯,有旧的可读性问题。通常情况下的测试更容易阅读。

但也有例外。像SQL这样的语言通常都是大写的(虽然不区分大小写)。

此外,还有其他用途,比如区分“常量”和常规变量,你会在许多语言中看到它们,如PHP,Python等,尽管杰夫出于某种原因不喜欢这样,它显然违反了C#代码风格指南。

所以一般来说,我不认为这在任何地方都是错的,但我认为应该总是尝试遵循一般的最佳实践。在罗马时,像罗马人一样 - 在编写Python时,请遵循PEP 8:)

答案 9 :(得分:3)

Jeff在评论中还有其他一些要说的内容:

  
    

然而另一方面,我仍然使用全部大写的原因     下划线

  
     

少代码?这是一个值得的事业   值得认真讨论。

     

但是你是否称之为“foo”,   “Foo”,“_ foo”或“FOO”? MEH。

     

命名约定很高   有争议和宗教。   开发人员应该选择他们的东西   比如,希望没有的东西   太多与“本地人”不一致   惯例“,并且随便去吧   很多讨论和讨好   过度命名是不值得的。

     

那就是说,我认为所有的大写都是真的   很难阅读!

我也将它用于常量,但我也能理解为什么有些人不喜欢它。这有点像用德语或其他语言写小写字母。

答案 10 :(得分:2)

我不认为 错误。大多数情况下,这是个人选择。 为了您的个人编码,做你想做的。 对于您的专业编码,请遵循公司政策。

答案 11 :(得分:2)

就像用粗体写一切不是一个好主意

答案 12 :(得分:2)

有些人认为所有CAPS都是“老派”。考虑以下两者之间的区别:

const string ErrorMessage = "Some error message.";

const string ERROR_MESSAGE = "Some error message.";

两者都是完全可用的,但是新的开发人员使用的是ALL CAPS版本,例如那些以.NET开头的版本。

如果您的团队使用不同的风格,我认为这是一种糟糕的编码风格。除此之外,我并不在乎。至少当我在某些共享代码中看到所有CAPS时,我可以猜测它是一个常量。

答案 13 :(得分:2)

提出问题,为什么要使用所有大写字母?

答案 14 :(得分:2)

我将我的大写字母重新映射到了一个ctrl键(woo emacs!)。因此,当我必须在按住shift

的同时键入30个字符的名称时,我认为它的风格很糟糕

答案 15 :(得分:0)

我将ALL_CAPS用于宏和预处理器符号。所以我的C99前C常量是ALL_CAPS,但不是我所知道的任何其他语言。

答案 16 :(得分:0)

@ck,

因为它是公约。

答案 17 :(得分:0)

常量和常数可能不同。仅在处理预处理器时使用全封闭,例如在C ++中,建议避免使用它并使用const变量或constexpr,其命名方式与任何其他变量一样(可能带有一些前缀或某些东西,以明确它是一个常数,但......)。