函數範式入門(前言)

函數範式如今是一個很"時髦"的詞, 彷彿什麼語言,庫帶上了函數式就變得高大上起來了. 但實際上我問過不少人什麼是函數式?, 幾乎的回答都是lambda表達式, 能夠傳遞函數, Java8流式API或者RxJava等等. 固然這些也是函數範式帶來的東西, 但始終都沒有點到核心, 或者說"咱們爲何須要這些東西". 在沒有明白函數範式真正想要達到的事情以前, 盲目使用這些函數式工具無異於殺豬用牛刀.react

除此以外其實也有很多人也嘗試去理解真正的函數範式, 但函數範式中包含大量高度抽象的概念和數據結構, 一上來就是單子, 自函子, 幺半羣, Monoid, Monad等等範疇論的概念; 一樣因爲函數範式提倡用少許高度優化的數據結構實現複雜功能, 每種數據結構都一樣難以理解; 加上Haskell中的do語法這些工具在Java和Kotlin中原生並無, 實踐起來也極其困難, 直接勸退了大量的學習者.git

但雖然函數範式很是抽象, 但也很是強大, 並且也很是實用, 本人已經在大量的實際項目和庫中使用了其思想, 或者說如今已經被"嚴重毒害"了(笑). 就實際經驗經驗而言, 它是能夠很是按部就班地融入項目, 而對項目確實能很是好地控制項目的複雜度. github

但本人其實從2016年入坑到如今只有並不長的時間, 也很不學院派, 只是但願後續文章能經過我的的一些實踐經驗回答如下一些問題:編程

  1. 函數範式核心思想是什麼? 它想要解決什麼問題?
  2. 函數範式是否具備實用性? 它和麪向對象的區別
  3. 函數範式中是如何構建一個程序的?

文章中儘可能使用Kotlin語言做爲主語言, 但不可避免會間歇插入Haskell, Scala的代碼數據結構

與之相應的還有FRP(functional reactive programming)函數響應式編程, 這個概念也是最近提得不少的, 但大多數人並不能回答"爲何用了它程序就徹底不一樣了", 當並不明白這一點以前, 其實不少地方的用法就是錯誤的, 在以後的文章也許會相應的提到這相關的知識點.函數

本人只是普通的Android開發人員, 時間一般也不太充裕, 文章中有哪些不正確的地方, 歡迎你們提出工具

也歡迎關注我的的Github: Yumenokanata學習

相關文章
相關標籤/搜索