函式程式設計之道

banq發表於2015-04-10

大師和他的徒弟盤坐著進行圖靈冥想,沉思Lambda. 徒弟看著大師問:“老師,你能告訴我什麼是簡單嗎?程式設計是複雜的,框架通過去除選擇使得程式設計入手變得簡單,那麼類和框架哪個更好呢?”

大師看著徒弟問:“你讀過智者大師Carmack微博嗎?有時,優雅的實現只需要一個函式,不是一個方法,也不是一個類,不是一個框架,只是一個函式即可。”

“但是,老師”學生開始要發問,但是老師打斷它,問:“難道表示not functional(非函式性、非功能性)的詞語不是dysfunction(功能性障礙、不舉)的意思嗎?”

徒弟忽然明白了。

1. 不變性:真正的不變是變化,可變性隱藏了變化,隱藏了變化就會帶來混亂,智者會積極擁抱歷史。

如果你有一塊錢,我再給你一塊錢,這並不能改變之前你僅有一塊錢的情況,現在你有了兩塊錢,而可變性試圖抹掉歷史,但是歷史又不能真正被刪除,當過去事實無法追溯,它就如同鬼魂纏繞你,表現為程式中的Bug。

2.分離:邏輯是思想,效果是行動,智者總是在行動前思考,只有當思考完成後才行動。

如果你試圖同時執行動作和邏輯,你會製造副作用,它會引起你邏輯中的bug,保持函式最小化,一次只做一件事,做好它即可。

3.組合:自然的一切都是和諧的,一棵樹沒有水不能生長,一隻鳥而沒有空氣不能飛翔,智者總是通過配料把湯的味道做得更好。

為組合進行計劃,自然地將函式輸出作為其他函式的輸入,保持函式簽名儘可能簡單。

4.保護:時間是寶貴的,努力會花費時間,智者總是儘可能重用它們的工具,愚者子女故事為每次新情況創造特殊工具。

型別特定的函式不能被不同型別的資料重用,智者會讓函式處理許多資料型別,或者包裝起資料,讓其看上去和函式預期的一樣,列表List和其中條目item是最偉大的通用抽象。

5.流水不腐:死水無法飲用,食品丟在一邊會腐爛,智者總是讓事情流動起來。

基於時間的列表集合是一個流。共享物件和資料固定會使得函式彼此相互干擾,同一個資源的執行緒競爭能夠絆倒對方死鎖,只有當資料通過純函式自由地流動起來,程式才是有條理,可預期的。

6.智慧:智者邁出第一步之前首先找到路,智者是函式思維,而不智者會在叢林中迷失方向。

The Dao of Immutability — JavaScript Scene — Mediu

[該貼被banq於2015-04-10 14:14修改過]

相關文章