2014-03-02 15 views
2

在討論iOS Crypto Flaw也討論了Ars Technica之後,有人提到他們遇到了一個情況,其中,無括號的表達式後面的行被視爲else任何隱含的其他括號中的if語句?語言未知

if (<condition>) 
    <expression A>; 
    <expression B>; 
<expression C>; 

所以,根據人,表達乙是,如果條件爲真,如果else是隱式的和不必要的,因爲跳過。

這與我聽到的任何事情相反 - 如果條件爲真,那麼所有三個表達式都將被執行 - 但由於我是支架支持者,我的經驗可能會受到限制,所以我很猶豫,完全把這個人叫出來。相反,我花了大約10分鐘的時間澄清並確保我正確理解他們在說什麼:)

他們說什麼有什麼道理?什麼語言?

我很肯定所有主要的腳本語言都遵循我的理解。我認爲這個人在Objective-C中有更大的背景。但是,如果這是真的,那麼始終使用括號當然是最好的理由。

+0

這可能太寬泛了,可能不是正確的論壇來問這個問題,但我選擇了SO,因爲它是如此特定於'if/else'結構 – vol7ron

回答

1

這將是非常不合邏輯的,我強烈懷疑任何具有這種語法規則的語言都會獲得很多支持(儘管我選擇使用的語言都有我不喜歡的語法,所以它當然有可能)。

執行此操作的任何可能方式(如果查看語言中的其他語法規則時都會導致看起來不一致的行爲,或者在可能的情況下非常嚴格地限制),並且無論如何,最初都不利於可讀性 - 如果它具有相同的縮進,那麼你將如何在其塊中包含多行的if語句,或者這會被禁止?如果else部分會減少縮進,那麼您將如何區分作爲else的一部分的代碼或緊接在if語句之後的代碼,或者每個if語句都必須有else部分?而多線else也是一個問題。如果它完全基於什麼時候存在或不存在大括號或類似的花括號,那麼這將開始非常混亂。

也就是說,也有esoteric languages,這確實有一個「任何事情」的座右銘。

一種深奧的編程語言(有時縮寫爲esolang)是一種編程語言,旨在測試計算機編程語言設計的界限,作爲概念證明或作爲笑話。

如果存在具有這種語法規則的深奧語言,我不會感到驚訝,也不會特別有意義。

另一種可能是該人在看這樣的情況:

<type> someFunction() 
{ 
    if (<condition>) 
     return <expression A>; 
    return <expression B>; 
} 

這將是同義的第二return語句之前明確else,如if語句return語句會導致它後面的return語句只在條件爲false時才被執行。

+1

您的示例是我最初認爲這個人正在談論的既通用又實用。當他們提到,如果條件是「真」,可以跳過「表情B」,那就是當我的耳朵乾乾淨淨時。我在想,Python或基於結構的語言可能會使用縮進來將下面的縮進行作爲else語句來處理,但是沒有任何語言會出現。 – vol7ron