函數式編程正重新進入人們的視野:
[*]CL,Scheme,Erlang,ML系列等原生函數式編程語言受到越來越廣泛的關注
[*]主流編程語言(C++,Java,PHP,...)里也在逐步引入一些函數式編程中的元素
[*]「工業級」的JVM與CLR上也出現了各種新興的函數式編程語言(Clojure,Scala,F#,...)
在各種函數式編程語言中Haskell都可以算函數式「味道」非常濃烈的語言。
例如僅「默認使用非嚴格求值」就可以在上述提到的編程語言中獨樹一幟。除此之外Haskell還採用了許多在其他編程語言里難以一見的編程概念:
[*]curried form的函數
[*]純函數與不可變數據
[*]顯式化可組合的副作用
[*]強大的類型系統
等等。
正因為相比主流編程語言(甚至許多函數式編程語言)Haskell有太多獨特之處,選取Haskell作為學習函數式編程的載體是一件有趣且又富有挑戰性的工作。
這種時候有一本合適的入門級教程會讓人取得事半功倍的效果。滿足該定位的中文書籍非《Haskell趣學指南》(Learn You a Haskell for Great Good!)莫屬。
接觸函數式編程的契機以及學習並使用函數式編程的動機。
在實際工作中使用函數式編程的經驗。
函數式編程在實際應用中的前景。
——————
三個問題我放在一起討論吧。
在眾多函數式編程語言中,我比較喜歡的是Scala。
Scala語言是基於JVM的,可以在程序中同時使用函數式編程思想和過程式編程思想,也支持面向對象編程,還可以調用龐大的Java庫,尤其是類型安全,代碼簡潔。
幾年前最初接觸Scala語言是因為Play框架。Play框架是一個Web開發框架,也是一個全棧式的應用框架。Play框架包括MVC模型、類似於Hibernate的ORM、基於Groovy的模板引擎、基於Apache Mina的HTTP伺服器,跟Ruby社區的Rails框架相似。Play框架還有開發效率高、排除故障方便、支持非同步開發、支持熱部署等特性。
由於Play框架同時支持Java和Scala,因此我開始嘗試了解Scala。並在學習Scala的過程中逐步體會到它的強大之處。
還有Scala語言的Akka庫,用於簡化編寫容錯的、高可伸縮性的Java和Scala的Actor模型應用,極端的強悍。
有些項目的個別模塊我們就是採用Scala開發的。
對使用函數式編程的最大體會是它能拓展開發者的編程思路,讓開發者不再局限於OO編程思想,解決問題的方法也不至於很狹窄了。
目前面向對象仍然是主流,函數式編程還是小眾,就像蘿蔔青菜,各有所愛那樣,沒有誰能取代誰。函數式編程至少給程序員的編程生活帶來了一些樂趣。
[火星人 ] 函數式編程語言急先鋒:Haskell已經有2301次圍觀