<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 什么是函數式編程? 實例教程 > 原文: [https://www.guru99.com/functional-programming-tutorial.html](https://www.guru99.com/functional-programming-tutorial.html) ### 什么是函數式編程? 函數式編程(也稱為 FP)是通過創建純函數來思考軟件構造的一種方式。 它避免了在面向對象編程中觀察到的共享狀態,可變數據的概念。 功能性語言對表達式和聲明而不是對語句的執行進行實驗。 因此,與其他依賴于局部或全局狀態的過程不同,FP 中的值輸出僅取決于傳遞給函數的參數。 在本教程中,您將學習- * [什么是函數編程?](#1) * [功能編程的特征](#2) * [功能編程的歷史](#3) * [功能編程語言](#4) * [基本功能編程術語和概念](#5) * [函數編程的好處](#6) * [功能編程的局限性](#7) * [函數式編程與面向對象的編程](#8) ### 功能編程的特征 * 函數式編程方法著重于結果,而不是過程 * 重點在于要計算的內容 * 數據是不可變的 * 函數式編程將問題分解為“函數” * 它基于數學函數的概念,該數學函數使用條件表達式和遞歸來執行計算 * 它不支持循環語句之類的迭代和 If-Else 之類的條件語句 ### 功能編程的歷史 * 函數式編程的基礎是 Lambda 微積分。 它于 1930 年代開發,用于功能應用,定義和遞歸 * LISP 是第一種功能編程語言。 麥卡錫于 1960 年對其進行了設計 * 70 年代后期,愛丁堡大學的研究人員定義了 ML(元語言) * 在 80 年代初期,Hope 語言為遞歸和方程式推理添加了代數數據類型 * 2004 年,功能語言“ Scala”創新。 ### 功能編程語言 任何 FP 語言的目標都是模仿數學功能。 但是,計算的基本過程在功能編程中有所不同。 以下是一些最著名的函數式編程語言: * 哈斯克爾 * SML * Clojure * 階梯 * Erlang * 清潔 * F# * ML / OCaml Lisp /方案 * XSLT * 的 SQL * Mathematica ### 基本功能編程術語和概念 ![](https://img.kancloud.cn/ab/bd/abbd6aed441824a3a92b70025543b7aa_828x569.png) ## 不變數據 不可變數據意味著您應該能夠輕松地創建數據結構,而不是修改已經存在的數據結構。 ### 參照透明 功能程序應該像第一次一樣執行操作。 因此,您將知道在程序執行期間可能發生或未發生的事情及其副作用。 在 FP 中,這稱為參照透明性。 ### 模塊化 模塊化設計提高了生產率。 小型模塊可以快速編碼,并且有更大的重用機會,這無疑會導致程序的更快開發。 除此之外,可以單獨測試模塊,這有助于您減少在單元測試和調試上花費的時間。 ### 可維護性 可維護性是一個簡單的術語,這意味著 FP 編程更易于維護,因為您無需擔心意外更改給定功能之外的任何內容。 一流的功能 “一流功能”是一個定義,歸因于對編程語言實體的使用沒有限制。 因此,一流的功能可以出現在程序中的任何地方。 ### 關閉 閉包是一個內部函數,即使在父函數執行之后,它也可以訪問父函數的變量。 ### 高階函數 高階函數要么將其他函數作為參數,要么將其作為結果返回。 高階函數允許部分應用程序或應用程序。 該技術一次將一個函數應用于其參數,因為每個應用程序都返回一個接受下一個參數的新函數。 ### 純功能 “純函數”是一個函數,其輸入被聲明為輸入,并且不應隱藏任何輸入。 輸出也聲明為輸出。 純函數根據其參數起作用。 如果不返回任何內容,則效率不高。 而且,它為給定參數提供相同的輸出 **示例**: ``` Function Pure(a,b) { return a+b; } ``` ### 功能不純 不純函數恰好與純函數相反。 它們具有隱藏的輸入或輸出; 這被稱為不純。 不純函數具有依賴性,因此不能單獨使用或測試。 **范例** ``` int z; function notPure(){ z = z+10; } ``` ### 功能組成 功能組合是將兩個或多個功能組合為一個新功能。 ### 共有國家 共享狀態是 OOP 編程中的重要概念。 基本上,它是向對象添加屬性。 例如,如果硬盤是對象,則可以將存儲容量和磁盤大小添加為屬性。 副作用 副作用是發生在調用函數外部的任何狀態更改。 任何 FP 編程語言的最大目標是通過將副作用與其余軟件代碼分開來最大程度地減少副作用。 在 FP 編程中,至關重要的是要消除其余編程邏輯中的副作用。 ### 函數式編程的好處 * 使您避免混淆代碼中的問題和錯誤 * 易于測試和執行單元測試以及調試 FP 代碼。 * 并行處理和并發 * 熱代碼部署和容錯 * 通過較短的代碼提供更好的模塊化 * 提高開發人員的生產力 * 支持嵌套功能 * 惰性映射&列表等功能構造 * 允許有效使用 Lambda 微積分 ### 功能編程的局限性 * 函數式編程范例并不容易,因此對于初學者來說很難理解 * 難以維護,因為在編碼過程中會演化出許多對象 * 需要大量的模擬和廣泛的環境設置 * 重用非常復雜,需要不斷重構 * 對象可能無法正確表示問題 ### 功能編程與面向對象編程 | **功能編程** | **OOP** | | FP 使用不可變數據。 | OOP 使用可變數據。 | | 遵循基于聲明式編程的模型。 | 遵循命令式編程模型。 | | 它關注的重點是:“您在程序中正在做什么。” | 它的重點是“如何進行編程”。 | | 支持并行編程。 | 不支持并行編程。 | | 它的功能沒有副作用。 | 方法會產生很多副作用。 | | 使用具有遞歸功能的&函數調用來執行流控制。 | 流控制過程是使用循環和條件語句進行的。 | | 語句的執行順序不是很重要。 | 語句的執行順序很重要。 | | 支持“基于數據的抽象”和“基于行為的抽象”。 | 僅支持“基于數據的抽象”。 | **結論** * 函數式編程或 FP 是一種基于一些基本定義原則的軟件構造思考方式 * 函數式編程概念著重于結果,而不是過程 * 任何 FP 語言的目標都是模仿數學功能 * 一些最著名的函數式編程語言:1)Haskell 2)SM 3)Clojure 4)Scala 5)Erlang 6)干凈 * “純函數”是一個函數,其輸入被聲明為輸入,并且不應隱藏任何輸入。 輸出也聲明為輸出。 * 不可變數據意味著您應該能夠輕松地創建數據結構,而不是修改已經存在的數據結構 * 使您避免混淆代碼中的問題和錯誤 * 功能代碼不容易,所以對于初學者來說很難理解 * FP 使用不可變數據,而 OOP 使用可變數據
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看