面向對象編程范疇(OOP)從80年代C++到90年代java的興起已經經歷了幾十年的高潮,是不是已經發展到了盡頭,該是函數式編程(FP)開始興旺發達的時候了吧。這樣說似乎心眼兒有點壞,可能會得罪當今大多數的編程人員。不過計算機硬件技術的發展往往會催生新的編程技術,這倒是無可反駁的現象。當今世界上計算機行業中大數據、電子商務、多核CPU,高並發網絡的普及使得C++,java這些OOP范疇的編程語言顯得那么地不盡人意,函數式編程范疇的編程語言將成為主流,這應該是句大實話了吧。
說到函數式編程(FP)我們常常會聯想到以下幾個方面:
1、不可變性 - Immutability
2、函數既值 - Function as value
3、無副作用 - No side effects
這幾樣特性可以很好地解決多核CPU、多線程、高並發問題。
scala是個OOP和FP混合范疇的編程語言。這是因為考慮到那么許多從OOP世界過來的編程人員可以盡快上手,而且有許多問題可能用OOP方式能得到更好的解決。但重要的是在使用scala編程中到底以OOP還是FP為主。如果我們采用scala的FP為主的話,scala標准庫(sdandard library)中的數據類型和函數組件就顯得不足夠應付,我們必須在用scala FP開發軟件前准備好一套較為完整的函數組件庫(combinator library)。幸運的是我們現在有了scalaz,它使我們在泛函編程的道路上節省了一大段路程。
scalaz是一套用scala語言編寫的函數庫。scalaz為用戶提供了大量的數據類型和組件函數來支持函數式編程。實際上scalaz的代碼貢獻者們是受到了純函數式編程語言haskell的啟發,把haskell中的數據類型、結構、函數組件在scalaz中用scala進行了重新實現。既然我們打算采用scala的FP,我們可能必須把scalaz作為基礎組件庫來使用,那么我們必須首先了解scalaz的庫結構、里面各種數據類型和組件函數、掌握它們的使用方式以及應用模式。
當然,在學習和介紹scalaz的過程中我們還可以更多了解scala的函數式編程模式以及它所著名的貼切簡潔的表現形式。
讓我們期待這個系列的scalaz討論能真正的把我們帶入函數式編程范疇的世界。。。