Tes*_*rex 6 language-agnostic coding-style
如果我有一个从几个地方调用的函数,并且它需要满足某些条件来执行它所执行的任何操作,应该在哪里检查该条件?在我的情况下,它是绘图 - 如果按住鼠标按钮,然后执行绘图逻辑(这是在拖动时在鼠标移动处理程序中完成的.)
选项一说将它放在函数中,以确保它被检查.抽象,如果你愿意的话.
public function Foo() {
DoThing();
}
private function DoThing() {
if (!condition) return;
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当读取Foo
可能远离DoThing
它的代码时,它看起来像一个bug.第一个想法是没有检查条件.
然后,选项二是在打电话之前检查.
public function Foo() {
if (condition) DoThing();
}
Run Code Online (Sandbox Code Playgroud)
这读起来更好,但现在您不得不担心从您调用它的任何地方进行检查.
选项三是将函数重命名为更具描述性.
public function Foo() {
DoThingOnlyIfCondition();
}
private function DoThingOnlyIfCondition() {
if (!condition) return;
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这是"正确的"解决方案吗?或者这有点太过分了?我觉得如果一切都像这个函数名称将开始复制他们的代码.
关于这是主观的:当然是,并且可能没有正确的答案,但我认为它仍然完美在家.从比我更好的程序员那里获得建议是第二种最好的学习方式.主观问题正是谷歌无法回答的问题.
根据DRY,我会选择第一个.
public function Foo() {
DoThing();
}
private function DoThing() {
if (!condition) return;
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
一旦你习惯了这个模式,DoThing()
你的代码就会变得不那么令人不安.你会开始像读取它一样阅读它EnsureThingDone()
.