為什么函數(shù)式編程很重要:不一樣的白板圖
為什么我們要學(xué)習(xí)函數(shù)式編程?為獲得更好的軟件設(shè)計(jì)技術(shù)!
一天,我們?cè)O(shè)計(jì)了一個(gè)流程,來校對(duì)款項(xiàng)的收支平衡。下面這張圖就是我們?cè)趲啄昵霸O(shè)計(jì)出的結(jié)果:
那以后我們開始學(xué)習(xí)函數(shù)式編程。函數(shù)式編程讓我們以數(shù)據(jù)流的方式思考過程處理:數(shù)據(jù)進(jìn)來,做變換,過濾,計(jì)算,最終的結(jié)果就是輸出。不僅軟件是這樣工作的,每段代碼,每個(gè)函數(shù),都模型化成數(shù)據(jù)輸入,數(shù)據(jù)輸出。中間沒有狀態(tài)的變換。
按這種方式思考問題使我們得到了這樣的流程圖:
把程序當(dāng)成數(shù)據(jù)管道的思考方式使我們關(guān)注結(jié)果應(yīng)該是什么,而不是每一步應(yīng)該如何做。這種更高層次的思考問題的方式使得我們?cè)谙到y(tǒng)設(shè)計(jì)階段避免陷入細(xì)節(jié)實(shí)現(xiàn)的泥潭中。
不管用什么語言寫成解決方案,這樣的方式思考能讓我們獲得下面的好處:
* 功能細(xì)化。(黃色的框代表JIRA任務(wù))需求在圖上已經(jīng)顯得非常明白:輸入什么,輸出什么。每項(xiàng)任務(wù)都能獨(dú)立的開發(fā)。
* 每個(gè)字節(jié)都可測試。涉及到數(shù)據(jù)庫的代碼已經(jīng)放到了外面;不僅如此,每個(gè)方框都完全由輸入輸出來定義。對(duì)于測試來說這是一種最簡單的單元組件。
這樣一來,函數(shù)式的思考方式對(duì)敏捷編程(任務(wù)分解),TDD,和程序的可維護(hù)性都有好處。代碼變的模塊化。問題變得更容易分析,因?yàn)槲覀兡軌蛑烂恳徊襟E數(shù)據(jù)的樣子。
相互獨(dú)立,易于測試的組件:這就是函數(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/