許多函數編程語言都混合相當多的Imperative特性,學習函數編程時,如果使用這些語言,可能比較無法體會函數編程的意義。我鼓勵大家學習Erlang、Haskell、Occam、Oz等比較正統的函數式語言,並多多使用它們的程式庫。 你必須謹守FP(函數編程)的作法,才能達到前二回文章所提到的好處。不只是你的程式要遵守FP,連你用到的程式庫也必須遵守FP。因此,利用F#進行.NET編程能否具有這些優點,我持否定的態度。畢竟.NET Framework是OOP(物件導向編程)+ Imperative Programming(命令式編程)的方式所設計出來的API(Application Programming Interface,應用程序介面),而不是依據FP的構想而設計的API。
某些營養學家認為,想靠喝牛奶獲取鐵質,是錯誤的觀念,因為鈣與鐵會互相抑制彼此的吸收。F#結合了OCaml和.NET,試圖連結雙方的優點,但結局就好比同時添加高鐵和高鈣的奶粉,實際效果可能事與願違。但F#也並非一無是處,微軟為F#特別做出一套逼近OCaml 3.06的ML相容程式庫。寫程式時盡量多使用此ML程式庫以及F#的程式庫,少用標準的.NET框架,就比較能享有FP的優點。例如:使用ParallelFX,而不要用.NET Threading API。
你可能會問:既然如此,為何不直接用OCaml就好了?因為F#是微軟的語言,以微軟豐富的資源,如果有意好好發展F#,未來的F#程式庫勢必會越來越完備,有機會能夠超越OCaml。
到底FP有哪些常見的特色?我們可以透過FP作了些什麼,來了解FP是什麼。
Higher-Order Functions:某函數如果可以接受函數當作參數,或者以函數為傳出值,我們就稱這樣的函數為「較高次方函數」(Higher-Order Function)。較高次方函數讓程式可以變得相當有彈性,而且寫法比OOP更精簡許多。函數式語言有相當大的威力來自較高次方函數,特別是函數式語言的程式庫往往會有許多較高次方函數,可以幫助你進行資料處理(例如特殊排序法、資料對應、資料過濾)、事件處理。
全文>>
沒有留言:
張貼留言