說明
網(wǎng)上有很多深入語言層次講解函數(shù)式編程的應(yīng)用棍鳖,很多人無法理解,能用但是一頭霧水答朋,死記硬背贷揽,原因究其是核心思想不清楚。
我說的語言層次上的梦碗,例如
Spark
MapReduce
lambda
Groovy
RxJava
RxAndroid
等等吧禽绪,反正語言應(yīng)用現(xiàn)在都幾乎支持函數(shù)式編程思想。
函數(shù)式編程定義
函數(shù)式編程是種編程方式叉弦,它將電腦運(yùn)算視為函數(shù)的計(jì)算丐一。函數(shù)編程語言最重要的基礎(chǔ)是λ演算(lambda calculus),而且λ演算的函數(shù)可以接受函數(shù)當(dāng)作輸入(參數(shù))和輸出(返回值)淹冰。
和指令式編程相比库车,函數(shù)式編程強(qiáng)調(diào)函數(shù)的計(jì)算比指令的執(zhí)行重要。
和過程化編程相比樱拴,函數(shù)式編程里函數(shù)的計(jì)算可隨時(shí)調(diào)用柠衍。
我的理解
看到上面來自百科的介紹,肯定無法明白晶乔。
先忘掉編程珍坊,想想小學(xué)數(shù)學(xué)公式。比如說勾三股四玄五正罢,勾股定理阵漏。這個(gè)公式的推導(dǎo)過程,可能有好幾行,好多公式不斷的演算履怯。這個(gè)過程有代入數(shù)字嗎回还?沒有! 只有公式在不斷的演算叹洲,在程序中就是函數(shù)演算柠硕!因此
本質(zhì):函數(shù)式編程就是演算公式的過程
- 支持中間結(jié)果取得,只要你想要
- 具有惰性執(zhí)行运提,因?yàn)檠菟闶遣粓?zhí)行的蝗柔,真正執(zhí)行是最后的公式代入變量
- 性能高,快民泵,的確癣丧,不用計(jì)算中間量,占用較少計(jì)算機(jī)資源
歷史
講一下歷史洪灯。關(guān)于函數(shù)式的坎缭,1985年LISP語言問世,這個(gè)語言世界范圍內(nèi)多少人在用呢签钩?我覺得超不過1千人掏呼。這個(gè)語言是函數(shù)式的語言鼻祖。是計(jì)算機(jī)科學(xué)家兼數(shù)學(xué)科學(xué)家 使用的铅檩,是打通憎夷,演算 數(shù)學(xué)公式和計(jì)算機(jī)科學(xué)鏈接的橋梁。感興趣的可以完整去看昧旨。
完結(jié)
再次看看百科定義的概念拾给,是否豁然開朗。
再次看看語言層次上的應(yīng)用并緊緊擁抱函數(shù)式編程就是公式推導(dǎo) 是否簡單的多了呢兔沃?