備案號(hào):遼ICP備19007957號(hào)-1
聆聽(tīng)您的聲音:feedback@highmark.com.cn企業(yè)熱線:400-778-8318
Copyright ?2015- 海馬課堂網(wǎng)絡(luò)科技(大連)有限公司辦公地址:遼寧省大連市高新技術(shù)產(chǎn)業(yè)園區(qū)火炬路32A號(hào)創(chuàng)業(yè)大廈A座18層1801室
什么是函數(shù)式編程以及我們?yōu)槭裁匆褂盟?老師可以簡(jiǎn)單介紹一下嗎?
如果你剛剛開(kāi)始學(xué)習(xí)編程,那么你可能很難決定首先學(xué)習(xí)哪種編程范例和語(yǔ)言。如果你想學(xué)習(xí)與當(dāng)今技術(shù)環(huán)境相關(guān)的編程范式,不妨考慮函數(shù)式編程。這是一種更簡(jiǎn)單、更干凈、更可預(yù)測(cè)的代碼創(chuàng)建方式。生成的代碼也更易于測(cè)試和維護(hù)。但究竟什么是函數(shù)式編程?請(qǐng)繼續(xù)閱讀,進(jìn)一步了解這種編程范式吧!

函數(shù)式編程(FP)是一種使用純函數(shù)創(chuàng)建可維護(hù)軟件的軟件開(kāi)發(fā)方法。換句話說(shuō),程序是通過(guò)實(shí)現(xiàn)和組合函數(shù)來(lái)創(chuàng)建的。函數(shù)式編程通過(guò)使用變量、參數(shù)和返回值等函數(shù)來(lái)創(chuàng)建優(yōu)雅簡(jiǎn)潔的代碼,從而利用語(yǔ)言支持的優(yōu)勢(shì)。FP 還使用不可變數(shù)據(jù),避免共享狀態(tài)等概念。這與使用變量數(shù)據(jù)和共享狀態(tài)的面向?qū)ο缶幊?OOP)形成鮮明對(duì)比。
函數(shù)式編程語(yǔ)言側(cè)重于聲明和表達(dá)式,而不是執(zhí)行操作。函數(shù)也被視為一等公民,這意味著它們可以作為參數(shù)傳遞,由其他函數(shù)返回,也可以附加到名稱(chēng)中。FP 注重結(jié)果而非過(guò)程,不支持循環(huán)運(yùn)算符和條件運(yùn)算符(如 if-else)等迭代運(yùn)算。
FP 由 lambda 微積分(λ-calculus)演變而來(lái),這是數(shù)學(xué)家 Alonzo Church 在 20 世紀(jì) 30 年代開(kāi)發(fā)的一種用于函數(shù)和應(yīng)用程序的簡(jiǎn)單符號(hào)。函數(shù)式范式被許多編程語(yǔ)言和方言所采用,包括 Scheme、Common Lisp (CL) 和 Elixir。當(dāng)今許多領(lǐng)先的編程語(yǔ)言,包括 C#、Java、JavaScript、PHP 和 Python,都支持函數(shù)式編程或使用 FP 中的函數(shù)。
a.模塊化--如前所述,函數(shù)式編程高度模塊化。這使得生成的代碼更簡(jiǎn)短、更易讀。任何嘗試過(guò)解讀代碼的人都會(huì)欣賞這種簡(jiǎn)潔性。
b.你可以在程序中實(shí)現(xiàn) lambda 算法,用它們來(lái)解決復(fù)雜的問(wèn)題。
c.程序中包含許多函數(shù)式結(jié)構(gòu),包括延遲映射、延遲評(píng)估和列表。
d.有些編程語(yǔ)言支持嵌套函數(shù),這大大改善了代碼維護(hù)。
e.問(wèn)題更容易發(fā)現(xiàn)和解決--FP 對(duì)純函數(shù)的依賴(lài)使得調(diào)試和單元測(cè)試更加容易。純函數(shù)還能防止代碼中出現(xiàn)混亂和錯(cuò)誤問(wèn)題。
f.支持并發(fā)安全性--如果兩個(gè)并發(fā)進(jìn)程不試圖同時(shí)訪問(wèn)相同的數(shù)據(jù),代碼就是安全的。這種錯(cuò)誤就是 "競(jìng)賽條件"。由于純函數(shù)從不與程序的其他部分共享狀態(tài),因此不會(huì)出現(xiàn)競(jìng)賽條件。
面向?qū)ο缶幊膛c函數(shù)式編程之間有一些關(guān)鍵區(qū)別,其中之一就是命令式編程模型與聲明式編程模型。
OOP 使用命令式編程模型,這意味著解決問(wèn)題所需的每一步總是要編碼一個(gè)函數(shù)。在編碼每個(gè)函數(shù)時(shí),代碼本身決定了如何解決問(wèn)題。這種模式并不依賴(lài)模型來(lái)解決問(wèn)題,而是假設(shè)程序員知道解決問(wèn)題所需的函數(shù)。由于 FP 使用聲明式編程模型,因此它依賴(lài)編程語(yǔ)言的基本概念來(lái)執(zhí)行必要的步驟,以實(shí)現(xiàn)預(yù)定義的結(jié)果。
命令式程序側(cè)重于逐步解決問(wèn)題的過(guò)程,而聲明式程序側(cè)重于解決問(wèn)題的結(jié)果。
另一個(gè)關(guān)鍵區(qū)別是可變性。OOP 使用可變數(shù)據(jù),而 FP 使用不可變數(shù)據(jù)。可變對(duì)象在創(chuàng)建后可以修改(或移動(dòng)),而不可變對(duì)象則不能。在 FP 中,你需要?jiǎng)?chuàng)建一個(gè)對(duì)象副本,并使用該副本編寫(xiě)代碼的其余部分。一般來(lái)說(shuō),不可變代碼更容易更新,更易于管理,也更容易測(cè)試和調(diào)試。 由于變量是恒定的,因此也更容易理解和分析生成的代碼。許多程序員和軟件開(kāi)發(fā)人員更喜歡使用 FP 模型。
歸根結(jié)底,哪種編程模式適合你取決于你要使用的應(yīng)用程序。OOP 最適合標(biāo)準(zhǔn)、簡(jiǎn)單的項(xiàng)目,而 FP 最適合需要可擴(kuò)展性和靈活性的項(xiàng)目。
1.Haskell
Haskel是一種通用的全函數(shù)式編程語(yǔ)言。每個(gè)函數(shù)都是數(shù)學(xué)意義上的純函數(shù)。它沒(méi)有語(yǔ)句或指令,只有不能改變變量(局部或全局)或訪問(wèn)狀態(tài)(如隨機(jī)數(shù)或時(shí)間)的表達(dá)式。
2.Erlang
Erlang (Erlang/OTP) 是一種通用的并行和函數(shù)式編程語(yǔ)言。Erlang 廣泛應(yīng)用于電子商務(wù)、計(jì)算機(jī)電話和即時(shí)通訊領(lǐng)域。
3.Clojure
Clojure 是 Java 平臺(tái)上的一種功能性動(dòng)態(tài) Lisp 語(yǔ)言。它將高度組織化的基礎(chǔ)架構(gòu)與交互式腳本語(yǔ)言開(kāi)發(fā)相結(jié)合。Clojure 是多線程編程的理想選擇。
4.Common Lisp
Common Lisp 是 Lisp 編程語(yǔ)言家族的后裔。 它已被 ANSI 標(biāo)準(zhǔn)化,是一種多范式語(yǔ)言(支持函數(shù)式、過(guò)程式和面向?qū)ο缶幊谭妒降慕M合)。 Common Lisp 還有一個(gè)強(qiáng)大的宏系統(tǒng),允許程序員根據(jù)自己的應(yīng)用程序定制語(yǔ)言。
5.Scala
Scala 是一種通用編程語(yǔ)言,同時(shí)支持面向?qū)ο蠛秃瘮?shù)式編程。靜態(tài)類(lèi)型有助于防止復(fù)雜應(yīng)用中的錯(cuò)誤,而 JavaScript 和 JVM 運(yùn)行時(shí)允許程序員構(gòu)建由庫(kù)生態(tài)系統(tǒng)支持的動(dòng)態(tài)系統(tǒng)。
6.Elixir
Elixir 是一種通用函數(shù)式編程語(yǔ)言,適用于創(chuàng)建可擴(kuò)展和可維護(hù)的應(yīng)用程序。 它使用 Erlang 虛擬機(jī)為具有低延遲和容錯(cuò)能力的分布式系統(tǒng)提供動(dòng)力。Elixir 廣泛應(yīng)用于嵌入式軟件、網(wǎng)絡(luò)開(kāi)發(fā)、多媒體處理和其他應(yīng)用。
海馬課堂專(zhuān)業(yè)課程輔導(dǎo),3500+嚴(yán)選碩博學(xué)霸師資,針對(duì)學(xué)生的薄弱科目和學(xué)校教學(xué)進(jìn)度,匹配背景相符的導(dǎo)師,根據(jù)學(xué)生情況進(jìn)行1V1專(zhuān)屬備課,上課時(shí)間靈活安排,中英雙語(yǔ)詳細(xì)講解課程中的考點(diǎn)、難點(diǎn)問(wèn)題,并提供多方位的課后輔導(dǎo),輔助學(xué)生掌握全部課程知識(shí),補(bǔ)足短板。
閱讀原文:http://m.ghaquatic.com/qa/15329_57.html
版權(quán)作品,未經(jīng)海馬課堂 highmarktutor.com 書(shū)面授權(quán),嚴(yán)禁轉(zhuǎn)載,違者將被追究法律責(zé)任。
24h在線客服



備案號(hào):遼ICP備19007957號(hào)-1
聆聽(tīng)您的聲音:feedback@highmark.com.cn企業(yè)熱線:400-778-8318
Copyright ?2015- 海馬課堂網(wǎng)絡(luò)科技(大連)有限公司辦公地址:遼寧省大連市高新技術(shù)產(chǎn)業(yè)園區(qū)火炬路32A號(hào)創(chuàng)業(yè)大廈A座18層1801室
hmkt088
精品日韩欧美一区二区三区蜜臀| 在线精品91青草国产在线观看 | 国产免费无码又爽又刺激A片| 亚洲精品久久久一二区三区蜜桃av| 午夜福利亚洲| 亚洲日本乱码一区二区三区| 天天躁日日躁狠狠躁欧美| 无码翔田千里| 精品福利一区二区在线观看| 在线观看亚洲| 土耳其熟女老妇仑乱一区二区三区| 国产精品久久久久永久免费看| 久久无码一区| 少妇偷拍AV| 国产精品一区二区三密桃 | av亚洲国产小电影| 紧缚精品久久一区二区| 日韩欧美中文字幕熟女无码| 国产一级特黄黄色片| 日日操夜夜| 国产精品久久久久无码Av网曝门| 欧美性爱1区| 色欲99精品久久久久久| 丁香六月深婷婷激情五月| 伊人五月在线| 国产很黄很色精品久久久| 黄色一级特黄视频a| 婷婷激情五月天四射| 国产在线精品一区免费| 97成人在线视频| 黑人高清一区二区三区| 99精品偷拍在线| 91在线视频播放| 操逼操逼网站| 婷婷av午夜| 国产av一区二区精品久久凹凸| 欧美色一区二区三区四区| 手机在线观看黄色片网站| 欧美精品久久久久午夜福利| 国产精品久久久精品三级A| 伊人激惜网|