為什么函數(shù)式編程很重要:不一樣的白板圖
為什么我們要學(xué)習(xí)函數(shù)式編程?為獲得更好的軟件設(shè)計技術(shù)!
一天,我們設(shè)計了一個流程,來校對款項的收支平衡。下面這張圖就是我們在幾年前設(shè)計出的結(jié)果:
那以后我們開始學(xué)習(xí)函數(shù)式編程。函數(shù)式編程讓我們以數(shù)據(jù)流的方式思考過程處理:數(shù)據(jù)進來,做變換,過濾,計算,最終的結(jié)果就是輸出。不僅軟件是這樣工作的,每段代碼,每個函數(shù),都模型化成數(shù)據(jù)輸入,數(shù)據(jù)輸出。中間沒有狀態(tài)的變換。
按這種方式思考問題使我們得到了這樣的流程圖:
把程序當成數(shù)據(jù)管道的思考方式使我們關(guān)注結(jié)果應(yīng)該是什么,而不是每一步應(yīng)該如何做。這種更高層次的思考問題的方式使得我們在系統(tǒng)設(shè)計階段避免陷入細節(jié)實現(xiàn)的泥潭中。
不管用什么語言寫成解決方案,這樣的方式思考能讓我們獲得下面的好處:
* 功能細化。(黃色的框代表JIRA任務(wù))需求在圖上已經(jīng)顯得非常明白:輸入什么,輸出什么。每項任務(wù)都能獨立的開發(fā)。
* 每個字節(jié)都可測試。涉及到數(shù)據(jù)庫的代碼已經(jīng)放到了外面;不僅如此,每個方框都完全由輸入輸出來定義。對于測試來說這是一種最簡單的單元組件。
這樣一來,函數(shù)式的思考方式對敏捷編程(任務(wù)分解),TDD,和程序的可維護性都有好處。代碼變的模塊化。問題變得更容易分析,因為我們能夠知道每一步驟數(shù)據(jù)的樣子。
相互獨立,易于測試的組件:這就是函數(shù)式的。
新的編程技巧是有趣,但新的畫白板的技術(shù)卻是一件大事。
英文原文:Why Functional Matters: Your white board will never be the same
本文鏈接:http://www.aqee.net/why-functional-matters-your-white-board-will-never-be-the-same/