天天看點

沒有 if 語句的代碼長什麼樣子

沒有 if 語句的代碼長什麼樣子

if 語句是任何軟體工程師用來解決日常問題的基本工具之一。從第一天開始,它就是軟體工程的一部分,就在學生寫下第一個“hello world”之後。它無處不在,它的破壞力也是如此。

盡管工程師們系統地對這一現實視而不見,但讓我們看看我們如何改變思維方式來克服這個問題,并赢得與臭名昭著的 if 語句的戰鬥。

2013 年,我對一個有 20 年曆史的軟體進行逆向工程,他的原始建立者沒有留下任何文檔。幾周後,我了解了算法的工作原理——它背後的美——以及它的邊緣情況。這些邊緣情況由 if 語句(或它們的邪惡化身)映射,最終在代碼中形成一片森林。

如果您想知道,是的,它的原始建立者使用模式來适當地組織代碼并使其可讀,但事實是,模式隻是為了可讀性而隐藏 if 語句,但它們并沒有擺脫它們。是以,最後,它們都在周圍——就像蚊子整夜咬你一樣。

就在那一刻,我用以下方式挑戰自己。

如果每個算法可以使用有限數量的 if 語句,我将如何編寫解決方案?

經過一番反複,我發現 if 語句讓工程師懶于編碼,此外,為他們提供了一種簡單的方法來避免思考如何雄辯地解決問題——它創造了一種“啊,那裡是一個邊緣情況,讓我們寫一個 if 語句”。

考慮到這一點,現在我們可以談談我一開始承諾要分享的心态:

考慮一個問題,使邊緣情況成為常态的一部分,而不是例外。

讓我們用這種新的思維方式來解決一個實際的問題,看看它是如何工作的,在這種情況下——隻是為了加強我之前關于工程師在這個問題上系統性地盲目的觀點——讓我們使用算法工程師在大學第一年學習一種稱為“單連結清單”的特定資料類型:

沒有 if 語句的代碼長什麼樣子

盡管它是一段被廣泛使用的代碼,并且在世界各地的大學中都以這種方式教授,但該代碼已經很糟糕了——如果你到目前為止已經注意了,你可能知道為什麼……

是的,最後的 if 語句 。

我們不需要深入分析代碼,簡單來說就是處理一個特定的場景,當條目需要被删除,但是,删除的方式取決于它是第一個條目還是在中間(邊緣 案子)。

如果我們使用新的思維方式——以邊緣情況成為常态的一部分而不是例外的方式來思考問題——我們可以用這種新的方式重寫這段古老的代碼:

沒有 if 語句的代碼長什麼樣子

看看 if 語句是如何消失的,但更重要的是,邊緣情況現在是規範的一部分,而不是例外,而且——作為一個重要的副作用——代碼變得更加直接和雄辯。

盡管這是我們掌握主要思想的一個基本示例,但概念要複雜得多;它是關于看到邊緣案例模式并本能地知道如何将它們轉化為規範。一開始很難,但通過練習變得更容易管理。

現在繼續打開您昨天正在處理的代碼,并嘗試使用這種新思維方式删除您的第一個 if 語句!

學習更多技能

請點選下方公衆号

繼續閱讀