if和很多的if
Last updated
Was this helpful?
Last updated
Was this helpful?
如上圖,藍色線為if(運算式)
的運算式成立,執行//運算式
的運算式;綠色線則是為if(運算式)
的運算式不成立時,跳過大括號裡的程式碼不執行,繼續執行大括號以下的程式碼。
在某些時間點
,程式設計師會選擇是否要執行
某些程式碼;換句話說,「只要條件成立
,就執行程式碼。」 (如果要選擇是否要編譯
某些程式碼,則稱之為條件編譯)
或者程式碼很多時,要加上括號代表,這些都是一起的。
剛剛說到條件成立
,在此來討論什麼叫「條件成立」。
成立:運算式結果 非零
或true
不成立:運算式結果 為0
或false
運算式它可以是邏輯運算
(回傳true
/false
),也可以是算術運算
(回傳數字
),也可以使用函數的回傳值
(回傳true
/false
/傳數字
)。
注意:在此指的數字包含整數
和浮點數
,因為兩種的情況有些資料型別上的細節要注意,我們放在變數的章節講。
下面的範例程式碼,會把一段conversation印在螢幕上,IsChrisAnswer
決定Chris是否要回Mary的話。
下面程式是否會回答I am Chris.
下面我們介紹一下同時出現很if
時,增加可讀性的做法 這是一個可讀性不高的例子。
遇到這種很深的if
,而沒有else
時,表示即將要執行的程式碼,是一種非常非常特例的程式,必須要符合眾多的條件才可以執行。
那麼,我們就把它的條件,通通用AND
連結起來,範例如下
其實,這段程式碼的意思,就是這樣。要所有的條件通通的符合時,才執行。但是有時這麼寫會成條件描述的可讀性 降低太多,就算把它們都裝成獨立概念的function
還是過於複雜,我們可以試試第二種做法。
遇到必須符合很多條件才可以執行的程式碼,其實另一個語意就是說這些條件只要不符合,就不用執行該行了。
這樣的語意,對於條件的可讀性,就會強調許多。每一個條件只要不成立,就不執行程式。
我們另外寫個小程式來說明這件事
這是一個非常有價值的bug,《Expert C Programming Deep C Secrets》一書開門見山就提到了這個bug,會造成嚴重損失又非常的難以偵錯。而在《Writing Solid Code》中提及了如何避免這種情況發生。
雖然這兩本都是介紹C語言的書,由於C++的相容性,C語言的程式技巧依然在C++是可行的。
編譯器允許們這麼寫
編譯器不允許我們這麼寫
不過,編譯器卻允許我們這麼寫
寫=
是賦值,寫==
是偵測是否相等。賦值的原則,必須將右邊的值移到左邊來,而偵測是否相等,則不強制要求左右各是誰。這麼樣就可以避免把==
誤寫成=
的錯誤,造成complier
沒問題,linker
沒問題,執行卻出了大問題。