这两个示例中的哪一个会表现得更好:
示例1:
if($condition_1)
{
if($condition_2)
{
// do something
}
}
示例2:
if($condition_1 and $condition_2)
{
// do something
}
答案 0 :(得分:6)
这是过早微优化的严重情况。即使存在差异,对于不存在也是微不足道的 - 这不是哪一个表现更好的问题,哪一个更具可读性。这取决于具体情况。但是,除了上下文之外,我会说第二种选择更可取:“if”语句意味着“else”,即使它不存在,并且两个“ifs”误导了读者。
答案 1 :(得分:6)
差异(如果有的话)可以忽略不计。由于short-circuit evaluation
,您不必担心第二个评估两个条件IMO第二种形式使代码更具可读性。我讨厌看到一百万个缩进。
答案 2 :(得分:2)
如果有一个,那将是微不足道的差异。我稍后会看到简洁。
答案 3 :(得分:2)
嵌套控件结构将有更多Cyclomatic Complexity。比较嵌套的if块构造
Lines of Code (LOC): 6
Cyclomatic Complexity / Lines of Code: 0.40
Comment Lines of Code (CLOC): 1
Non-Comment Lines of Code (NCLOC): 5
与复合if块结构相比
Lines of Code (LOC): 9
Cyclomatic Complexity / Lines of Code: 0.25
Comment Lines of Code (CLOC): 1
Non-Comment Lines of Code (NCLOC): 8
请注意,数字因代码布局而异。在一行上编写嵌套结构会将CC增加到0.67。一般来说,您希望避免嵌套控制流程太深,因为它将更难维护。
因此,如果它不能提高可读性,请使用组合比较。
编辑:如果您想知道为什么它有9个和6个LOC:因为我在我用于分析的文件中添加了<?php
和空行
答案 4 :(得分:1)
答案 5 :(得分:0)
如果它只是一个块,请使用后面的选项,因为它需要更少的缩进,更短,可以说更具可读性。
但是,请注意,从那时起,您将使用第一个变体,因为您将添加else
s。这些显然不一样:
if ($condition_1) {
if ($condition_2) {
// do something
}
else {
//do something else
}
}
if ($condition_1) {
if ($condition_2) {
// do something
}
}
else {
//do something else
}