哪個更好?使用if ... else ...或者只是...確定返回的內容
function test($val = 'a') {
if($val == 'a') {
return true;
}
return false;
}
或
實際上,他們做同樣的事情。如果$val
不是'a',則該函數返回false。只是個人喜好?
哪個更好?使用if ... else ...或者只是...確定返回的內容
function test($val = 'a') {
if($val == 'a') {
return true;
}
return false;
}
或
實際上,他們做同樣的事情。如果$val
不是'a',則該函數返回false。只是個人喜好?
我認爲這歸結於如何比較「感覺」給你。如果它看起來像$ val是「a」是一個特殊情況,我會使用第一個,並且通常該函數返回false。如果覺得它更像是50/50,那麼我會用第二個。
它們是相同的。然而,對於這種情況,我更喜歡:
function test($val = 'a') {
return ($val == 'a');
}
我會堅持第一個,代碼越簡單越好。
在這些,我更喜歡第二個清晰。然而,我其實更喜歡
return ($val == 'a');
當你正在閱讀第二個代碼塊。當val不等於'a'時,你可以很容易地認爲它返回false。
但是在第一個代碼塊中,它很難理解它什麼時候會返回false。這個例子並不難,但我認爲你的if子句不會那麼簡單。
在PHP中,如果在函數中沒有做任何事情,並且達到了最終結果,它將會像返回false一樣。正因爲如此,如果在函數內部不執行任何其他操作,則不需要返回false。這給我們留下了這一點:
function test($val = 'a') {
if($val == 'a') {
return true;
}
}
如果,如果,ELSEIF或else語句後只有一個命令,在大括號(「{」「}」)是沒有必要的,這使我們結束了這:
function test($val = 'a') {
if($val == 'a') return true;
}
在PHP中,您實際上可以返回一個比較,它將在返回之前執行。這就是其他回答這個帖子的人建議的。這樣做可以讓我們使用此代碼:如果塊「($ VAL ==‘A’)」成立
function test($val = 'a') {
return ($val == 'a');
}
返回True,否則爲false將被退回,因爲這是不正確的。邏輯。
我實際上傾向於使用我提出的第二個約定,出於習慣。看到其他人提出的第三個簡單的美,我可能會在適用的時候切換到那個簡單。
編輯:
如果要編寫代碼,對於非PHP專家更容易理解,另一種方法是如下:
function test($val = 'a') {
if($val == 'a')
return true;
else
return false;
}
我會說,不使用大括號在我的第二個示例中描述的情況下,爲您提供了易於閱讀的代碼,因爲如果它們不包含多行,則大括號會使代碼看起來雜亂無章。
我真的相信這是你試圖傳達給代碼的意圖。如果你看看這個:
function test($val = 'a') {
if($val !== 'a') {
return false;
}
return true;
}
你可以看到它和你的例子有相同的作用,但它有不同的意圖。在這個例子中它真的不會作出任何意義有:
function test($val = 'a') {
if($val !== 'a') {
return false;
}
else {
return true;
}
}
我認爲@Ned了吧,因爲他想傳達的if
操作的意圖。
你的(第一個)變體是快樂路徑的一個很好的例子。 http://en.wikipedia.org/wiki/Happy_path – 2010-06-13 06:57:41
'藍色藥丸或紅色藥丸......'大聲笑!快樂之路永遠是更好的道路! – Gutzofter 2010-06-13 16:46:24
不是:
下面的方法比較好,還有的else
和代碼沒有更多的開銷也短:
function test($val = 'a') {
if($val == 'a') {
return true;
}
return false;
}
它可以作出更短:
function test($val = 'a')
{
return ($val == 'a');
}
如果你沒有返回boolean
我會選擇第一種形式。在這種情況下,我只會這樣做:
return ($val == 'a');
正如其他人所建議的那樣。
如果else塊有很多行,我猜是遞歸的一部分呢?這對我來說感覺有點困惑(似乎無法在註釋中正確地格式化代碼?):'private Node deleteMin(Node x)if(x.left == null)return x.right; x.left = deleteMin(x.left); x.N = size(x.left)+ size(x.right)+ 1; return x; }' – allanx2000 2015-12-14 21:00:05