Jeff完成his post谈论这件事,但我没有理解。
那么,为什么你认为这是一种糟糕的编码风格?
编辑:
我和很多人一样,不认为这是一种糟糕的编码风格。但杰夫比我更好的程序员,如果我错了,他的观点会转过头来点亮我的回答。我是一名Delphi开发人员已有几年了,现在我正在成为一名C#开发人员,在Delphi中这是一种常见的做法。
答案 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
是完美的:它们可以立即识别和熟悉。我的工作场所风格指南的一部分(我们没有那么多)是用大写字母写出所有静态常量。不要流汗;只需使用团队其他成员使用的任何内容。决定StudlyCaps
与camelCase
vs SCREAMING_CAPS
的决定值得花90秒讨论。
答案 2 :(得分:20)
尖叫很好。在常量的情况下,它告诉读者
不要在以后改变我 CODE
但我理解软程序员是否会受到冒犯。
答案 3 :(得分:9)
理论上,它更难阅读 - 我们人类喜欢使用可变高度的字母来提高阅读速度(我们可以从粗糙的单词形状和第一个/最后一个字母推断出很多信息)。但是,我对短句,所有大写短语都没有问题。它几乎没有“大喊大叫”(你编译器并不关心你有多粗鲁),并清楚地表明名称可能是可变的,而那些不是。
答案 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,其命名方式与任何其他变量一样(可能带有一些前缀或某些东西,以明确它是一个常数,但......)。