风格问题:如果阻止功能?

GSt*_*Sto 3 language-agnostic conditional coding-style function

假设我有一个只应该定义一些常量才能执行的函数.以下哪一项会更好

选项1:将所有函数调用包装在if块中:

if(defined('FOO_BAR_ENABLED')) {
   foobar();
}
Run Code Online (Sandbox Code Playgroud)

我想通过这种方式意图更清晰,但每次调用函数时都需要检查常量.

选项2:检查函数本身的常量:

function foobar() {
  if(!defined('FOO_BAR_ENABLED')) {
    return;
  }
  //do stuff 
}
Run Code Online (Sandbox Code Playgroud)

这种方式需要较少的代码行,并且必须检查常量.但是,我发现在没有实际执行任何操作时看到对此函数的调用会让人感到困惑.思考?

Eri*_*ikE 10

我可以建议将函数重命名为FoobarIfEnabled(),然后检查函数吗?

从一个与语言无关的答案中大量窃取我自己的一个问题,在编程时我们有以下问题:

  1. 说得对.
  2. 讲清楚.
  3. 简明扼要.
  4. 快一点.... 以该顺序.

如果您在该功能之外进行检查,您可能最终会在一个地方错过它.如果你想改变行为,你必须找到它被调用的所有地方并修复它.这是一个违反原则1的维护噩梦.通过在名称中添加"IfEnabled"或类似名称,现在它不仅正确而且也很清楚.你怎么能打败那个?

除非最终速度不令人满意并且您已将此识别为瓶颈(不太可能),否则不要担心性能.

我建议你按照上面的链接阅读,因为这是一个非常有用的答案,让我有很多想法.