2013-09-23 90 views
0

我有一个关于else条件的冲突。我可以用两种方式编写程序。其他语句的用法

  1. 方法1

    $msg = ''; 
    if(cond) 
    { 
        $msg = 'success'; 
    } 
    else 
    { 
        $msg = 'error'; 
    } 
    
  2. 方法2

    $msg = 'error'; 
    if(cond) 
    { 
        $msg = 'success'; 
    } 
    

能否请你告诉我哪一种方法更好,怎么样?由于

+1

'$ msg =(cond)? '成功':'错误';'? – Nobody

+0

第二个比较好,当然。线条少,行为相同,不会产生影响。 – DontVoteMeDown

+5

在这种情况下,它看起来没有什么区别,但作为一个经验法则,我喜欢将变量设置为“更安全”或更可能的条件,所以如果它变成一长串检查并且我错过了某些东西,或意外发生的事情,它至少有一个默认值。 – Mike

回答

3

在这两者之间,我会选择第一个。

$msg = ''; 
if(cond) { 
    $msg = 'success'; 
} else { 
    $msg = 'error'; 
} 

这是可读的,并清楚地表达了它试图做的事情。 如果条件成立,则消息将是success。如果不是,则消息将是error

但是对于上面的一些非常简单的东西,我会使用三元语句代替。这是非常有用的,可以减少代码,但可能会使您的代码在某些情况下无法读取:

$msg = (cond) ? "success" : "error"; 

很酷,对不对?在这里阅读更多关于ternary operators

+0

只要条件不过分复杂,我会说三元运算符更具可读性,并具有使所有情况下变量初始化都很容易的优点。 – Nobody

+1

这很主观,但我同意第一个更好。如果程序块变长,那么不熟悉代码的人可能会“忘记”$ msg'具有“默认”初始化。 – jedwards

+0

@Nobody:我同意。使用三元运算符听起来像* this *中的最佳解决方案。 –

1

我想说第二个更好,因为它是少线,它有一个默认行为。无论如何,即使您在路上添加其他检查,您也知道$ msg将包含某些内容。不过,我想使用三元运算在这种情况下:

$msg = (cond) ? 'success' : 'error';

1

代码的可读性问题,所以我会用三元运算符当它真正简化了的样子。 考虑这一点,

function foo($stuff) { 

    $var = null; 

    if ($stuff === true) { 
    $var = true; 
    } else { 
    $var = false; 
    } 

    return $var !== null ? true : false; 
} 

因为在这种情况下,return $var !== null ? true : false很短,它可以被视为“容易阅读和理解”。

考虑这一点,

function foo($stuff) { 

    $var = null; 

    if ($stuff === true) { 
    $var = true; 
    } else { 
    $var = false; 
    } 

    if ($var !== null) { 
    return true; 
    } else { 
    return false; 
    } 
} 

同样的事,但一点点长

结论

  • 如果条件并不长,它的好坚持与三元运营商(由于可读性)。但是,如果它不是,那么你最好用if/else

坚持你也应该把这个事情“办法”,而不是“法”,因为一个方法是一个类中的一个函数。