2011-12-12 85 views
5

當我開始開發時,我遵循總是使用{}(花括號)來封裝塊的教程。然而,當我開始查看其他人的代碼時(例如GitHub上的類,或者更多的代碼,而不是基本教程將會顯示的代碼),但是我也看到了塊語句,例如沒有被包含在{}中;塊 - 花括號/無花括號?

if($var < 15) 
    $string = 'Hello, Jimmy!'; 
elseif($var >= 15) 
    $string = 'Hello, Anne!'; 

相同

if($var < 15) { 
    $string = 'Hello, Jimmy!'; 
} elseif($var >= 15) { 
    $string = 'Hello, Anne!'; 
} 

我從來沒有使用不包含在{}塊,但是我今天使用他們,我開始看到這樣做的效率(它看起來很多清潔過,因爲我經常會發現充斥着{}我從功能循環,條件等

什麼我問的是,

a)沒有大括號(;我注意到,在輸入一行後,我的IDE從縮進中退出,並在條件有效後返回。

b)當沒有使用{}時,是否有最佳做法?

任何答案,特別是那些公司。背景/文件關於花括號使用大括號和不使用它們的大會將不勝感激,因爲我真的想了解大括號的用法:)!

+1

這是一個偏好問題。我真的不喜歡忽略它們,其他人也這麼做。如果你是一致的,你可能沒問題。 –

+0

有了這個在SSL中的主要錯誤,我會說這個問題是非常有針對性的。請注意,*總是*使用大括號可以確保這個問題沒有發生。 https://www.imperialviolet.org/2014/02/22/applebug.html – Alan

回答

4

可以省略{}爲一個單行:

if(something) 
    do something else 

但是你不能忽略它,並把它堅持下去,像這樣:

if(something) 
    do one thing 
    do another 
    do some more 

上面的例子就只有1種條件元素('做一件事')。其餘的只是無條件地運行。

是的,我以前看過沒有{}之前的sl method方法,我自己更喜歡用{}來分開邏輯,並且更容易閱讀。

所以堅持在代碼中使用{}

+1

偉大的徹底的答案!我會堅持使用它們:)。我會接受定時器何時下降。 – Avicinnian

8

最佳做法是始終使用它們。對於其他開發人員來說,添加一行代碼或刪除一行代碼並完全打破條件非常容易。

0

如果在花括號後面有多行代碼,則只需使用它們。

if($var) return true; 

一樣

if($var) { 
    return true; 
} 

不過,如果你有一個以上的線越多,你必須附上他們在大括號。

if($var) { 
$var += 1; 
$var2 = $var; 
return $var2 
} 

我個人當一行代碼其次,因爲你是對的,它看起來更清潔停止使用它們,特別是如果它全部在一行像上面的語句。同樣,如果您減少了else if語句,並且只使用returnif失敗時停止該函數,並且繼續保持真實的下一個if,那麼您的代碼將更易於管理。它可以真正快速地使用很多else if語句,並且不使用開關。除了個人偏好之外,如果它只是一行代碼,則會丟失大括號。

AlienWebguy是正確的,當涉及到專業發展,在這種情況下使用它們。

0

大括號是可選的,如果有條件的或循環之後要執行的語句是隻有一行:

//This outputs "hello" 
$test = 1; 
if($test == 1) 
    echo "hello"; 

//This outputs "howdy" 
$test = 1; 
if($test == 2) 
    echo "hello"; 
    echo "howdy"; 

無論您圍繞單行語句用大括號是個人喜好的問題和如果您正在開展一項合作項目,也可能會受到編碼風格文檔的支配。就我個人而言,我從不使用它們作爲單個語句,並允許縮進我的代碼以顯示代碼是如何組織的,但是如果您看到上面的第二個示例,這是我之前見過的錯誤在哪裏蠕變的情況。編碼器創建一個條件根據該條件執行單行。然後另一個編碼器進入並添加第二行,但忘記添加大括號。所以從這個角度來看,你可以說總是使用它們。這很大程度上取決於您的個人情況。

1

它主要取決於你習慣的風格。 http://en.wikipedia.org/wiki/Indent_style

if (some_error) 
    something(); //Will be executed only when some_error==true 
somethingelse(); //Will always be executed. 

如果不使用大括號只剩下一行是if語句的一部分。

if (some_error) err1 = "bad1"; errorno=3; 

當然,在上面的例子中,無論some_error是否爲真,errno總是3。

它是與循環

for (i = 0; i < 10; i++) 
    doSomething (i); 

所以括號標記相同的地方開始,在哪裏結束。不使用它們意味着只有下一行將受到if,for,while,...語句的影響。

此外,大括號可用於標記代碼塊。當我用C++編寫代碼時,我總是用花括號標記GL調用的開始和結束。

glBegin(GL_TRIANGLES); // Drawing Using Triangles 
{ 
    glVertex3f(0.0f, 1.0f, 0.0f); // Top 
    glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left 
    glVertex3f(1.0f,-1.0f, 0.0f); // Bottom Right 
} 
glEnd(); 

這樣就更容易閱讀和發現丟失的glEnd調用。