使用不同于其类型的变量名称,我是不道德的?

Jas*_*ker 95 language-agnostic coding-style naming-conventions variable-names

例如,拿这段代码:

var person = new Person();
Run Code Online (Sandbox Code Playgroud)

或者你的Pythonistas:

person = Person()
Run Code Online (Sandbox Code Playgroud)

我不断被告知这有多糟糕,但还没有看到这两行代码不道德的例子.对我来说,人是一个人,并试图给它另一个名字是浪费时间.我想在语法突出显示之前的几天,这将是一个大问题.但是现在,除了变量名之外,告诉类型名称很容易.哎呀,在SO上看到差异很容易.

还是有什么我想念的?如果是这样,如果您能提供导致问题的代码示例,将会很有帮助.

And*_*are 94

那些告诉你这个坏的原因是什么?我一直这样做.这是命名单个变量类型的最简单,最富有表现力的方法.如果您需要两个Person对象,那么您可以person使用有意义的形容词作为前缀

fastPerson
slowPerson
Run Code Online (Sandbox Code Playgroud)

否则只是

person
Run Code Online (Sandbox Code Playgroud)

对我很好.

  • "那些告诉你这个是坏事的原因是什么?" - 不知道.这就是我开始这个话题的原因.:-) (8认同)
  • @David - 你抓住了我!我知道在真空中进行编码迟早会把它丑陋的脑袋抬起来:)虽然严重 - 我发现很难相信你会因为根据这个命名惯例无法识别类型和它们的实例而被绊倒. (3认同)
  • @David - 这应该是代码分析工具的问题.此外,这就是为什么类型以Python中的大写字母开头的约定. (2认同)

Jos*_*rke 69

我在方法签名中经常使用这种模式.如果我无法提供备用描述性名称,那么恕我直言,这没有任何问题.

如果你有两种类型的人和人那么这是非常错误的.


Bil*_*ard 45

我一直用它来进行临时对象引用.我会像原始数据类型的瘟疫一样避免它.

Person person = new Person(); // okay

int Int = 42; // pure evil
Run Code Online (Sandbox Code Playgroud)

  • 同意.单个字母变量名称尖叫"我是临时的".循环索引应该是i,j,k,其他任何一个应该是a,b,c,x,y,z,或任何其他不能被误认为是其他东西的字母,如l和o. (3认同)

Chr*_*ris 18

如果有人说这是邪恶的,请问他们这是否更好:

var abc = new Person();
Run Code Online (Sandbox Code Playgroud)

  • @Chris:确切地说!或者更好的是:`var temp = new Person();`(免责声明:我知道确实有一些地方一次使用临时变量,但是当我在某人的代码中看到这一点时,作者通常都没有回过头来给var一个合适的名字,它也可能是"abc".) (2认同)

PEZ*_*PEZ 15

如果Person是上下文中的普通人,那么"person"就是一个非常好的名字.当然,如果Person在代码中具有特定角色,那么最好使用该角色来命名她.


Mik*_*vey 9

我想我会因为这样说而被投票,但......

刚刚经历了一个世纪见证了史诗般的谋杀和贪婪,如果我们能做的最不道德的事情就是命名变量,那么程序员真的很幸运.

  • 或者,如果我们能做出的道德决定具有如此微不足道的意义,那么我们就会受到诅咒.我不确定我是否希望我的悼词能够专注于我的编码风格.我希望至少能够提及我作为一个家庭的一部分. (6认同)

Tim*_*ond 8

我认为这不一定是"坏",但很明显,如果你有资格给它更多的背景,比如它是什么样的人(你只与一个可能是许多可能的人打交道),然后别人选择它起来可能会更好理解.


Mar*_*ham 6

杰森 - 我不确定是谁告诉你这很糟糕.许多作者使用它作为表达(大写)的实例(小写)的标准方式.

我经常使用它,因为我发现低级变量实际上与我通信不仅是这是一个实例而且是类的名称.

除非有人有相反的坚定论据,否则我肯定会继续这样做.


Rob*_*Day 6

它被认为是坏的原因是如果你将来需要2个人,你可以得到看起来像的代码.

人人=新人();

Person person2 = new Person();

那将是接近"坏".但是,在这种情况下,您应该重构您的原始人,以便区分这两者.

至于您的示例,变量名称"person"是对象"Person"的完美描述性名称.因此,无论如何都没有错.