2011-08-06 84 views
2

我一直在想,這是否速記,如果我們可以稱呼它,是編碼的親PHP開發者中可接受的做法:常見做法?

foo() && bar(); 

,而不是

if(foo()) { 
    bar(); 
} 

雖然IMO單線代碼很整潔,我沒有看到它在任何地方使用。

+2

我想說如果有的話,'foo()和bar()'會更普遍(或者至少應該是(imo;)))。但我不是一個「專業」的PHP開發人員...... –

+1

它在Bash和Perl腳本中相當常見......當然還有無處不在的'mysql_connect(...)或die()',它們落在相同的位置類別我想。 –

+1

你可以說'if(foo())bar();'如果你想在一行上。甚至是'foo()? bar():null;',如果你想的話。但除了聰明之外,這只不過是句法糖。說出傳達*含義*的含義,而不是適合一條線。 – Tomalak

回答

3

這是多種語言開發人員的常見做法。技術上沒有什麼問題,但根據它在StackOverflow上顯示的次數來判斷,我會繼續說它是「只有當它是唯一有意義的東西時才使用」。大多數人不期望它。

這就是說,這是完全正確的:

foo()?bar()?bat():zonk():baz(); 

正如

foo() && bar() && baz(); 

只需記住:

function foo(){return true;} 
function bar(){echo "bar";} 
function baz(){echo "baz"; return 2;} 
echo foo()||foo()?baz():baz(); // baz2 
1

就我個人而言,我沒有看到任何問題。這是相當普遍的,所以大多數PHP程序員會理解它,就像他們會理解擴展版本一樣,這使得它完全可以接受。

1

最重要的部分是你寫的代碼,很容易讀書。使用諸如foo()bar()等函數名稱完全沒用,所以很難說你想比較哪兩個比較好。

旁邊的是,如果例如有一些相當大的缺陷,以及:

  • if是一個語言結構,但你使用它像一個功能。
  • 您將垂直空間添加到if條件中。由於空間影響視覺焦點,這會使事情變得難以閱讀。

另一種建議是:

if (foo()) { 

但是你要比較兩個:代碼總是在它的上下文。可讀的代碼使用它的上下文。您的建議都可以有效,關鍵是您可以從代碼中讀取含義:

conditionMet() && gotForIt(); 

    if (conditionMet()) goForIt(); 

爲您自己決定。只是不要混合從一條線到另一條線,因此請在整個代碼中保留一種樣式。

1

foo() && bar();是一個布爾表達式,所以如果你不把它放在一個布爾上下文中(例如if,while等條件),那就錯了。

代碼必須告訴正在解決的問題的「故事」,使用這個快捷方式並沒有講述故事。這是一個醜陋的黑客,它不是優雅的。

如果你認爲它是「整潔」,那麼你還沒有達到的地步代碼意味着想法,而不是代碼。