不断滥用?

Bry*_*owe 19 c# coding-style

我在一些具有以下常量的C#项目中遇到了一堆代码:

    const int ZERO_RECORDS = 0;
    const int FIRST_ROW = 0;
    const int DEFAULT_INDEX = 0;
    const int STRINGS_ARE_EQUAL = 0;
Run Code Online (Sandbox Code Playgroud)

有没有人见过这样的东西?有没有办法合理化使用常量来表示语言结构?IE:C#在数组中的第一个索引位于第0位.我认为如果开发人员需要依赖常量来告诉他们语言是0,那么就会出现更大的问题.

这些常量的最常见用法是处理数据表或"for"循环.

我是不是觉得这些是代码味道?我觉得这些并不比以下更好:

const int ZERO = 0;
const string A = "A";
Run Code Online (Sandbox Code Playgroud)

Ano*_*on. 12

我是不是觉得这些是代码味道?我觉得这些并不比以下更好:

比较以下内容:

if(str1.CompareTo(str2) == STRINGS_ARE_EQUAL) ...
Run Code Online (Sandbox Code Playgroud)

if(str1.CompareTo(str2) == ZERO) ...
if(str1.CompareTo(str2) == 0) ...
Run Code Online (Sandbox Code Playgroud)

哪个更直接?

  • str1.Equals(str2)是有道理的:p (56认同)
  • 好吧,最后一个对我来说最有意义..NET中的比较始终返回-N,0或N来表示顺序,如果您是.NET程序员并且不知道该习惯用法,那么您应该学习它. (10认同)
  • 我使用==而不是.Equals作为字符串.为了最大可读性. (6认同)
  • 更重要的是,它不只是"在.NET中" - 它是一个非常古老的习语,至少和C`strcmp`一样古老,而且可能更老.它也被广泛使用,包括高级语言. (5认同)
  • 如果你使用0,那么任何有经验的人都知道它是什么.缺乏经验的开发人员可能需要查找,但他们会学习.使用STRINGS_ARE_EQUAL,没有人会真正知道它是什么.他们会有一个好主意,但事实上发生了奇怪的事情将使他们检查.更有经验的人会记得,他们被认为是一个常数是他们认为是严重咬伤的时候. (4认同)
  • 如果你必须进行那么多字符串比较,请在string上定义扩展方法:`string.IsLessThan(string)`和/或`string.IsGreaterThan(string)`.但是为了平等,请使用`string.Equals(string)`.这就是它的用途. (2认同)

gbn*_*gbn 10

滥用,恕我直言."零"只是其中的基础之一.

虽然STRINGS_ARE_EQUAL可能很简单,但为什么不".Equals"?

接受限制使用魔法数字?

  • 我同意.我只是为了可读性,但你必须期待一些核心竞争力.+1 (2认同)

Tom*_*and 5

这肯定是代码味道.

意图可能是为代码添加"可读性",但是在我看来这样的事情实际上会降低代码的可读性.


tlo*_*ach 5

有些人认为程序中的任何原始数字都是"神奇的数字".我已经看到编码标准基本上说你不能只是把一个整数写入程序,它必须是一个const int.

  • 我也见过这个.事实上,总是存在异常,零应该是魔术数规则的例外. (2认同)