LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

怎么理解函數(shù)式編程思維?

admin
2023年10月25日 9:52 本文熱度 607

      理解函數(shù)式編程要注重思維的轉(zhuǎn)變。函數(shù)式編程聚焦于簡(jiǎn)潔的高階函數(shù),高階函數(shù)注重封裝底層運(yùn)作原理來解決復(fù)雜的業(yè)務(wù)場(chǎng)景,比如 Scala、Groovy、Clojure 語(yǔ)言:



1. 靜態(tài)類型必須先指定變量和函數(shù)的類型,而動(dòng)態(tài)類型則允許推遲指定類型。強(qiáng)類型的變量“知道”自己的類型,允許反射和對(duì)實(shí)例作類型測(cè)試,且一直保有自身的類型信息。弱類型的語(yǔ)言相對(duì)不了解變量所指向的內(nèi)容。

2. 命令式告訴計(jì)算機(jī)執(zhí)行的步驟,一步一步告訴它怎么做。函數(shù)式更注重“做什么”本身,函數(shù)式編程是面向數(shù)學(xué)的抽象,函數(shù)式的代碼里只有函數(shù)和數(shù)據(jù)。

       

       函數(shù)式編程提供以下幾個(gè)特性,讓開發(fā)拋開細(xì)節(jié),投入到更高的抽象工作中:

  • 高階函數(shù)

  • 閉包:由函數(shù)(環(huán)境)及其封閉的自由變量組成的集合體,比如 Java script 和 Groovy 都提供了閉包的概念。

  • 柯里化和函數(shù)的部分施用:柯里化指的是從一個(gè)多參數(shù)函數(shù)變成一連串單參數(shù)函數(shù)的變換。部分施用指通過提前代入一部分參數(shù)值,使一個(gè)多參數(shù)函數(shù)得以省略部分參數(shù),從而轉(zhuǎn)化 為一個(gè)參數(shù)數(shù)目較少的函數(shù)。

  • 遞歸:命令式與函數(shù)式最大一個(gè)區(qū)別是,當(dāng)需要重復(fù)做一件事時(shí),命令式喜歡用循環(huán),而函數(shù)式更偏好遞歸。

  • Stream 和作業(yè)順序重排

  • 記憶(memoization)和緩求值(laziness):類似于命令式編程的緩存,Groovy、Clojure 都提供了記憶的功能。


        函數(shù)式語(yǔ)言的重用表現(xiàn)在函數(shù)的通用性上,它們鼓勵(lì)在數(shù)據(jù)結(jié)構(gòu)上使用各種共通的變換,并通過高階函數(shù)來調(diào)整操作以滿足具體事項(xiàng)的要求。比如函數(shù)式編程語(yǔ)言用一組關(guān)鍵數(shù)據(jù)結(jié)構(gòu)(如 list、 set、map)來搭配專為這些數(shù)據(jù)結(jié)構(gòu)深度優(yōu)化過的操作,基于這些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)和操作組成的一套運(yùn)轉(zhuǎn)機(jī)構(gòu)上面,按需要“插入”另外的數(shù)據(jù)結(jié)構(gòu)和高階函數(shù)來調(diào)整機(jī)器來解決具體的問題。再比如函數(shù)式編程語(yǔ)言提供了如 Either 類、Option 類來優(yōu)化異常處理問題等。


        在模式與重用方面,Java 提供了經(jīng)典的 23 種設(shè)計(jì)模式來解決復(fù)雜的業(yè)務(wù)問題,函數(shù)式編程讓這些設(shè)計(jì)模式有了三種歸宿:

  • 模式被吸收成為語(yǔ)言的一部分。針對(duì)于工廠模式,Groovy 語(yǔ)言直接提供的高階函數(shù)特性可以讓我們節(jié)約大量的八股代碼。針對(duì)工廠模式,在設(shè)計(jì)模式的語(yǔ)境下,柯里化相當(dāng)于產(chǎn)出函數(shù)的工廠。針對(duì)策略模式, Groovy 語(yǔ)言以代碼塊定義的形式為開發(fā)提供了便利。

  • 模式中描述的解決辦法在函數(shù)式范式下依然成立,但實(shí)現(xiàn)細(xì)節(jié)有所變化。針對(duì)享元模式,函數(shù)式編程提供的記憶功能發(fā)揮了重要作用。

  • 由于在新的語(yǔ)言或范式下獲得了原本沒有的能力,產(chǎn)生了新的解決方案


        現(xiàn)實(shí)應(yīng)用方面,Java8 提供了基于 lamda 表達(dá)式的函數(shù)式編程,但 Java 非函數(shù)式編程語(yǔ)言,Java 將問題域封裝在對(duì)象之內(nèi),并允許通過業(yè)務(wù)操作來改變對(duì)象的狀態(tài),完全與函數(shù)式編程“變量無狀態(tài)”的思想背道而馳。那么函數(shù)式編程能應(yīng)用于企業(yè)級(jí)需求解決方案嗎?從另一個(gè)角度來思考,Java 是面向?qū)ο蟮牡木幊陶Z(yǔ)言,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)是面對(duì)企業(yè)級(jí)需求的解決方案,DDD 的戰(zhàn)術(shù)設(shè)計(jì)趨向于 CQRS 架構(gòu),而基于“變量不可變”的特性的函數(shù)式編程把 CQRS 架構(gòu)作為基礎(chǔ)設(shè)施,所以能把函數(shù)式編程視為企業(yè)級(jí)需求的解決方案嗎?很明顯不能,DDD注重模擬現(xiàn)實(shí)世界,函數(shù)式編程思維并沒有試圖模擬現(xiàn)實(shí)世界,所以無法滿足復(fù)雜的企業(yè)需求,函數(shù)式編程大處理大量數(shù)據(jù)方面比面向?qū)ο蠓绞礁哂行剩馐牵?/span>面向?qū)ο缶幊淌墙鉀Q企業(yè)級(jí)需求的解決方案,解決過程中會(huì)產(chǎn)出大量的數(shù)據(jù)需求,可借力函數(shù)式編程。另外,《函數(shù)式編程思維》作者提到多范式語(yǔ)言組合才是趨勢(shì),這一點(diǎn)很認(rèn)同,未來語(yǔ)言必是混合的。編程語(yǔ)言是我們?cè)谟?jì)算機(jī)世界里解決問題的工具,函數(shù)式更注重What,而命令式更注重How。對(duì)于解決問題的能力,沒有高低強(qiáng)弱之分,只是角度和工具不同而已。


附《函數(shù)式編程思維》讀書筆記:


該文章在 2023/10/25 9:52:04 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲精品小视频 | 亚洲国产精品路线一 | 日本韩国亚洲综合日韩欧美国产 | 亚洲国产综合在线区尤物 | 午夜福利在线不卡 | 亚洲日韩精品一区二区一 |