面向對象編程範疇(OOP)從80年代C++到90年代java的興起已經經歷了幾十年的高潮,是否是已經發展到了盡頭,該是函數式編程(FP)開始興旺發達的時候了吧。這樣說彷佛心眼兒有點壞,可能會得罪當今大多數的編程人員。不過計算機硬件技術的發展每每會催生新的編程技術,這卻是無可反駁的現象。當今世界上計算機行業中大數據、電子商務、多核CPU,高併發網絡的普及使得C++,java這些OOP範疇的編程語言顯得那麼地不盡人意,函數式編程範疇的編程語言將成爲主流,這應該是句大實話了吧。java
說到函數式編程(FP)咱們經常會聯想到如下幾個方面:編程
一、不可變性 - Immutability數組
二、函數既值 - Function as value網絡
三、無反作用 - 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的庫結構、裏面各類數據類型和組件函數、掌握它們的使用方式以及應用模式。ide
固然,在學習和介紹scalaz的過程當中咱們還能夠更多瞭解scala的函數式編程模式以及它所著名的貼切簡潔的表現形式。函數式編程
讓咱們期待這個系列的scalaz討論能真正的把咱們帶入函數式編程範疇的世界。。。函數