官术网_书友最值得收藏!

4.3 避免“懸掛else”問題

什么叫“懸掛else”?

很多編程語言在設計上無法避免這個問題的出現,即使是有多年編程經驗的程序員,一不小心仍然是會“中招”的。

請考慮下面的C語言代碼:

從這個例子的縮進結構和打印內容可以看出,編程者的本意是:如果age不滿足條件(age > 18),就執行else的內容。但事實上程序并不會按照我們的期望去執行,就上面的測試數據而言,程序將直接打印“恭喜,獲得青少年組一等獎!”這個字符串,結果與本意相去甚遠。

會出現這樣的失誤,是因為很多語言對于if-else語法都采用“就近匹配”的原則。所以,上面代碼的else應該是屬于內層的if語句。初學者也好,有多年編程經驗的老程序員也罷,常常會在這上面栽跟頭,這就是著名的“懸掛else”。

而使用Python開發則沒有這方面的顧慮:

前面我們講過:縮進是Python的靈魂,縮進的嚴格要求使得Python的代碼顯得非常精簡并且有層次,這種強制的規范使得代碼必須被正確地對齊。換言之,也就是讓程序員必須在編程的時候就非常確定else是屬于哪個if,而不存在模棱兩可的情況。限制了選擇,從而減少了不確定性,Python鼓勵第一次就能寫出正確的代碼。而且,強制使用正確的縮進,使得Python的代碼整潔、易讀,這就是地球人都喜歡Python的原因。

主站蜘蛛池模板: 永和县| 芮城县| 松江区| 呼伦贝尔市| 宁安市| 广汉市| 延川县| 鄂托克旗| 内黄县| 纳雍县| 怀化市| 元阳县| 贡山| 诸暨市| 进贤县| 峨眉山市| 平凉市| 保山市| 双柏县| 克山县| 涿州市| 峨边| 江安县| 鹤峰县| 临清市| 正宁县| 庆云县| 鸡泽县| 泽普县| 石屏县| 洛川县| 东辽县| 两当县| 永清县| 莱西市| 大竹县| 甘洛县| 苏尼特左旗| 平罗县| 巢湖市| 唐山市|