【问题标题】:Naming member functions/methods with a single underscore, good style or bad?用一个下划线命名成员函数/方法,好还是坏?
【发布时间】:2010-04-21 07:01:13
【问题描述】:

在某些无法覆盖 () 运算符的语言中,我见过带有单个下划线的方法,通常用于“帮助”类。像这样的东西:

class D10
{
   public function _()
   {
     return rand(1,10);
   }

}

有一个叫做 Roll() 的函数会更好吗?下划线可以吗?毕竟只有一个函数,就不用查类名了。

有什么想法吗?

【问题讨论】:

    标签: function coding-style


    【解决方案1】:

    我会说这是一种糟糕的风格。如果只是一个下划线,则无法从函数名称推断行为。

    为了了解它的作用,您需要阅读代码或文档。

    (顺便说一句,我认为 D10 也不是一个好名字)。

    【讨论】:

    • 这对任何 D&D 玩家来说都是半明显的。但是,是的,在这种情况下毫无用处。
    【解决方案2】:

    我想这是一个品味问题。但我不喜欢它。

    我相信拥有完整的不言自明的名称总是更好的做法。

    只使用一次按键调用函数不会节省太多时间,但之后可能会浪费更多时间记住函数的作用。

    但同样,这是非常主观的。

    【讨论】:

      【解决方案3】:

      这可能是合法的,与您一起工作的任何人都可能不介意(如果您独自工作则更是如此),但如果是我,那会让我发疯。拼写出D10.roll() 不会占用您太多时间,而且由于名称一目了然,因此代码更易于理解。

      不过,最重要的是,优雅在旁观者的眼中;如果编写代码的每个人都同意这是一个简单明了的标识符,那么没有人会阻止你。

      【讨论】:

        【解决方案4】:

        对我来说,这显然是一种糟糕的风格。

        方法名称是名称,应该是描述性的。它们不是您对人*、地点等的“专有名称”,它们是描述其中包含的代码所采取的操作的名称。

        *当然,虽然很多人的名字最初几乎是字面上的描述性,但现在通常不这样做。

        【讨论】:

          【解决方案5】:

          我认为该结构一开始就不是最佳的。我会这样做:

          class Dice
          {
             public int D10()
             {
               return rand(1,10);
             }
             public int D6()
             {
               return rand(1,6);
             }
             // And so on...
          }
          

          然后会很清楚,我们实际上是在讨论骰子,我们不必为每个可能的骰子创建一个类。

          如果你真的需要抽象出你正在使用的骰子,我希望你使用一种将函数作为第一类对象处理的语言,在这种情况下你会这样做:

          void RussianRoulette(SOMEFUNCTIONSIGNATURE dice)
          {
             if (dice() == 1)
               print "BANG";
             else
               print "click";
          }
          
          RussionRoulette(Dice.D6);   // Regular russian roulette
          RussionRoulette(Dice.D100); // For the faint of heart
          RussionRoulette(Dice.D1);   // Die! :)
          

          【讨论】:

            猜你喜欢
            • 2014-07-23
            • 1970-01-01
            • 2017-07-30
            • 1970-01-01
            • 2010-10-15
            • 1970-01-01
            • 2018-01-13
            • 1970-01-01
            • 2013-08-28
            相关资源
            最近更新 更多