如何在寫代碼時考慮到儘可能多的可能情況?

在程序中包含所有可能的情況一般很難完全做到,應該如何在寫代碼時考慮到儘可能多的可能情況?如何在平時刻意訓練這種思維方式?是否有一些理論和實踐方面的指導?

示例:給if、else、for、while後未添加{}的代碼添加{},考慮下儘可能多的可能情況


其實這種思維只要好好搞一搞Haskell,就建立起來了。

一個函數返回errorcode,和返回void然後拋異常,他們的類型都是一樣的。你調用了他,你就得檢查他的返回值。一旦你檢查了返回值,你就會有if。一旦你有了if,你要確保這一排的if-else if-else,只有else是用來處理正確的情況的,其他的都是用來處理錯誤的情況的。千萬不要在if和if-else裡面處理正確的情況。異常也一樣,try-catch,然後避免(...)。處理不了的就往上扔不要試圖掩蓋。

說了這麼多也就是說,要讓你的代碼寫成,一旦沒有處理完所有可能的錯誤就會長得很奇怪的樣子。當然你在Haskell裡面使用一個返回Maybe的函數,你不顯式的處理它,編譯就通不過。當然Haskell並沒有強制你處理所有分支,但是至少他讓你就算只處理一個分支,也得寫出長得跟分支一樣的代碼。這就是說為什麼我建議你搞搞Haskell。雖然沒人招人用Haskell,但是這對於提高你使用其他語言的能力是很有幫助的。

等你所有的代碼都寫成了這樣(一般體積會擴大5倍以上,因為實際上大部分的邏輯用來處理錯誤情況是很正常的),你就正確處理了所有的錯誤了。


不知道題主用的什麼語言,給題主推薦一些關鍵字吧:

  1. assert
  2. parameter check
  3. unit test
  4. exception

合格程序員的基本素養就是邏輯性,任何變數情況都要考慮。

至於你說添加{},那屬於編程規範,跟邏輯性沒有必然關係。


最好的方式還是培養測試驅動的思維,即寫代碼前先想好有哪些合法的測試用例(至於是否真的寫出unit test cases,則依據團隊的開發規範)。

你要有追求完美的心態,想著自己寫的程序盡量別有BUG,而不是想著我只是為了完成一個功能。多數代碼質量差、幾乎不考慮邊界條件的程序員都是對自己的要求太低,提高對自己的要求自然而然就會考慮提高用例覆蓋率。

想到被測試發現BUG和被產品經理指責的情形,難道你不會不寒而慄?


運行一次。


寫代碼之前自己寫文檔(大軟體)或者把大腦當編譯器過一遍(小軟體或者函數)


能力比較菜

寫代碼感覺處理各種邊界問題占的比例比寫真正的業務代碼多多了


不寫代碼


學習諸如Python這樣的腳本語言吧。

邊寫代碼,邊運行。很容易快速發現考慮不周的地方。

想考慮全面,沒有捷徑,全靠經驗積累。代碼寫的多了,常見的坑跳多了,也就知道怎麼處理了。

Python這樣的語言,方便寫測試例子。基本上你寫的模塊或者函數,都可以邊寫,邊在解釋器上測試效果。這樣可以最大限度的早發現bug,早解決bug,甚至更早的發現思路不通,避免浪費時間。

而c++之類的語言,強大但不易掌握。坑又多,很多時候令人很沮喪。

人生苦短,我用Python。

good luck。


推薦閱讀:

在渲染的過程中,CPU和顯卡各自起到了什麼角色?
在蘇聯時期蘇聯人用什麼計算機?
雙線性變換法的雙線性指的是什麼?
以現有計算機技術,如果造一台可有具有所有人腦思維功能的計算機,那麼這台計算機會佔地多大面積?
A B C 三個人相互射擊, A B C 命中率分別為 30% 50% 100% ,每輪每個人可以任選一個人射擊或者什麼也不做,開槍是同時的;請問,每個人都為了保證自己存活率更高的情況下,射擊的情況以及每個人的存活概率?

TAG:程序員 | 編程 | 程序員面試 | 計算機科學 | 編程理論 |