试图避免“意大利面条代码”,为什么多重if-else坏?

时间:2013-08-30 08:46:48

标签: php coding-style

我刚刚阅读了top 100 signs of spaghetti code,我遇到了第4号,它只是说明了:

if ($status == "awake"){ 
    $actitivity = "Writing spaghetti code"; 
} else if ($healthstatus == "OK"){ 
    $activity = "Sleep"; 
} else { 
    print "CALL 911 IMMEDIATELY!"; 
}

我在other spaghetti discussions中看到过多个if-else模式。我有点困惑,为什么会这样,即使它适用于这个例子。

以上示例是否错误,因为

  • 第一个变量是actitivity,表示编码器需要一些睡眠,所以这是一个笑话,或者

  • 视图不应在逻辑期间输出,或

  • 过多的if / else


编辑从不介意第二部分,因为嵌套条件和多次返回,这很糟糕

other spaghetti discussions链接中,这是不好的,因为

- 逻辑中有return,它打破了流程,或者

- 在彼此之上堆积了太多if/else ......?

1 个答案:

答案 0 :(得分:3)

If/else语句经常会中断Open-closed principle。 (Java示例,但在PHP中也有效)

解决方案=>有利于多态性。

此外,多次分配临时变量确实容易出错并降低了可读性。特别是在PHP中,因为它不是静态类型的语言。 确实,如果有人先分配$actitivity = "Writing spaghetti code";然后$actitivity = 1;怎么办? ...在同一个容器内混合苹果和橘子..看看这个:http://sourcemaking.com/refactoring/split-temporary-variable

此外,仅当其中一个条件被验证时,逻辑才允许副作用(print)=>方法没有凝聚力,因此违反了SRP。