【发布时间】:2010-04-21 07:01:13
【问题描述】:
在某些无法覆盖 () 运算符的语言中,我见过带有单个下划线的方法,通常用于“帮助”类。像这样的东西:
class D10
{
public function _()
{
return rand(1,10);
}
}
有一个叫做 Roll() 的函数会更好吗?下划线可以吗?毕竟只有一个函数,就不用查类名了。
有什么想法吗?
【问题讨论】:
标签: function coding-style
在某些无法覆盖 () 运算符的语言中,我见过带有单个下划线的方法,通常用于“帮助”类。像这样的东西:
class D10
{
public function _()
{
return rand(1,10);
}
}
有一个叫做 Roll() 的函数会更好吗?下划线可以吗?毕竟只有一个函数,就不用查类名了。
有什么想法吗?
【问题讨论】:
标签: function coding-style
我会说这是一种糟糕的风格。如果只是一个下划线,则无法从函数名称推断行为。
为了了解它的作用,您需要阅读代码或文档。
(顺便说一句,我认为 D10 也不是一个好名字)。
【讨论】:
我想这是一个品味问题。但我不喜欢它。
我相信拥有完整的不言自明的名称总是更好的做法。
只使用一次按键调用函数不会节省太多时间,但之后可能会浪费更多时间记住函数的作用。
但同样,这是非常主观的。
【讨论】:
这可能是合法的,与您一起工作的任何人都可能不介意(如果您独自工作则更是如此),但如果是我,那会让我发疯。拼写出D10.roll() 不会占用您太多时间,而且由于名称一目了然,因此代码更易于理解。
不过,最重要的是,优雅在旁观者的眼中;如果编写代码的每个人都同意这是一个简单明了的标识符,那么没有人会阻止你。
【讨论】:
对我来说,这显然是一种糟糕的风格。
方法名称是名称,应该是描述性的。它们不是您对人*、地点等的“专有名称”,它们是描述其中包含的代码所采取的操作的名称。
*当然,虽然很多人的名字最初几乎是字面上的描述性,但现在通常不这样做。
【讨论】:
我认为该结构一开始就不是最佳的。我会这样做:
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! :)
【讨论】: