C++函式式編程

C++函式式編程

《C++函式式編程》是2020年機械工業出版社出版的圖書,作者是[塞爾維亞] 伊凡·庫奇。

基本介紹

  • 中文名:C++函式式編程
  • 作者:[塞爾維亞] 伊凡·庫奇
  • 出版社:機械工業出版社
  • 出版時間:2020年1月1日
  • 頁數:262 頁
  • 開本:16 開
  • ISBN:9787111641988
內容簡介,圖書目錄,作者簡介,

內容簡介

 《C++函式式編程》介紹了C++的面向函式式編程。面向函式式編程是繼面向對象編程之後又一編程範式,解決了命令式(過程式)編程與面向對象編程中出現的問題,是一種極具潛力的編程方式,值得研究學習。主要講解了函式對象、純潔性(Purity)、惰性求值、range、函式式數據結構、代數類型及模式匹配、monad、模板元編程、並發的函式式設計,以及測試與調試等有關內容,還介紹了使用原有函式創建新函式的知識。
  《C++函式式編程》不僅可以作為C++程式設計師、編程愛好者以及軟體工程師學習函式式編程的參考書,還可以作為高等院校C++程式語言的高級教材。

圖書目錄

目錄
譯者序
致謝
前言
關於本書
關於作者
第1 章 函式式編程簡介
1.1 什麼是函式式編程?
1.1.1 與面向對象編程的關係
1.1.2 命令式與聲明式編程的比較
1.2 純函式(Pure functions)
1.2.1 避免可變狀態
1.3 以函式方式思考問題 ·
1.4 函式式編程的優點
1.4.1 代碼簡潔易讀
1.4.2 並發和同步
1.4.3 持續最佳化
1.5 C++作為函式式程式語言的進化
1.6 將會學到什麼
總結
第2 章 函式式編程之旅
2.1 函式使用函式?
2.2 STL 實例
2.2.1 求平均值
2.2.2 摺疊(Folding)
2.2.3 刪除字元串空白符
2.2.4 基於謂詞分割集合
2.2.5 過濾(Filtering)和轉換(Transforming)
2.3 STL 算法的可組合性
2.4 編寫自己的高階函式
2.4.1 接收函式作為參數
2.4.2 用循環實現
2.4.3 遞歸(Recursion)和尾調用最佳化(Tail-call optimization)
2.4.4 使用摺疊實現
總結
第3 章 函式對象
3.1 函式和函式對象
3.1.1 自動推斷返回值類型
3.1.2 函式指針
3.1.3 調用操作符重載
3.1.4 創建通用函式對象
3.2 lambda 和閉包(Closure)
3.2.1 lambda 語法
3.2.2 lambda 詳解
3.2.3 在lambda 中創建任意成員變數
3.2.4 通用lambda 表達式
3.3 編寫比lambda 更簡潔的函式對象
3.3.1 STL 中的操作符函式對象
3.3.2 其他庫中的操作符函式對象
3.4 用std::function 包裝函式對象
總結
第4 章 以舊函式創建新函式
4.1 偏函式套用
4.1.1 把二元函式轉換成一元函式的通用方法
4.1.2 使用std::bind 綁定值到特定的函式參數
4.1.3 二元函式參數的反轉
4.1.4 對多參數函式使用std::bind
4.1.5 使用lambda 替代std::bind
4.2 柯里化(Currying):看待函式不同的方式
4.2.1 創建柯里化函式的簡單方法
4.2.2 資料庫訪問柯里化
4.2.3 柯里化與偏函式套用
4.3 函式組合
4.4 函式提升(複習)
4.4.1 鍵值對列表反轉
總結
第5 章 純潔性:避免可變狀態
5.1 可變狀態帶來的問題
5.2 純函式和引用透明
5.3 無副作用編程
5.4 並發環境中的可變狀態與不可變狀態
5.5 const 的重要性
5.5.1 邏輯const 與內部const
5.5.2 對於臨時值最佳化成員函式
5.5.3 const 的缺陷
總結
第6 章 惰性求值
6.1 C++的惰性
6.2 惰性作為一種最佳化技術
6.2.1 集合惰性排序
6.2.2 用戶接口中的列表視圖
6.2.3 通過快取函式結果修剪遞歸樹
6.2.4 動態編程作為惰性形式
6.3 通用記憶化(Generalized memoization)
6.4 表達式模板與惰性字元串拼接
6.4.1 純潔性與表達式模板
總結
第7 章 range
7.1 range 簡介
7.2 創建數據的唯讀視圖
7.2.1 range 的filter 函式
7.2.2 range 的transform 函式
7.2.3 range 惰性求值
7.3 修改range 中的值
7.4 定界rang 和無限range
7.4.1 用定界range 最佳化用於輸入的range
7.4.2 用哨兵創建無限range
7.5 用range 統計詞頻
總結
第8 章 函式式數據結構
8.1 不可變鍊表(Immutable linked lists)
8.1.1 在表頭添加和刪除元素
8.1.2 在鍊表末尾添加和刪除元素
8.1.3 在鍊表中間添加和刪除元素
8.1.4 記憶體管理
8.2 不可變類向量結構
8.2.1 點陣圖向量樹中的元素查找
8.2.2 向點陣圖向量樹追加元素
8.2.3 點陣圖向量樹的修改
8.2.4 在點陣圖向量樹的末尾刪除元素
8.2.5 其他操作和點陣圖向量樹的整體效率
總結
第9 章 代數數據類型及模式匹配
9.1 代數數據類型
9.1.1 通過繼承實現和類型
9.1.2 通過union 和std::variant 實現和類型
9.1.3 特定狀態的實現
9.1.4 特殊的和類型:Optional
9.1.5 和類型用於錯誤處理
9.2 使用代數數據類型進行域建模
9.2.1 原始的方法及其缺點
9.2.2 更複雜的方法:自上而下的設計
9.3 使用模式匹配更好地處理代數數據類型
9.4 Mach7 的強大匹配功能
總結
第10 章 monad
10.1 仿函式並不是以前的仿函式
10.1.1 處理可選值
10.2 monad:更強大的仿函式
10.3 基本的例子
10.4 range 與monad 的嵌套使用
10.5 錯誤處理
10.5.1 std::optional作為monad
10.5.2 expected作為monad
10.5.3 try monad
10.6 monad 狀態處理
10.7 並發和延續monad
10.7.1 future 作為monad
10.7.2 future 的實現
10.8 monad 組合
總結
第11 章 模板元編程
11.1 編譯時操作類型
11.1.1 推斷類型調試
11.1.2 編譯時的模式匹配
11.1.3 提供類型的元信息
11.2 編譯時檢查類型的屬性
11.3 構造科里化函式
11.3.1 調用所有可調用的
11.4 DSL 構建塊
總結
第12 章 並發系統的函式式設計
12.1 Actor 模型:組件思想
12.2 創建簡單的訊息源
12.3 將反應流建模為monad
12.3.1 創建宿(Sink)接收訊息
12.3.2 轉換反應流
12.3.3 創建給定值的流
12.3.4 連線流
12.4 過濾反應流
12.5 反應流的錯誤處理
12.6 回響客戶端
12.7 創建狀態可修改的Actor
12.8 用Actor 編寫分散式系統
總結
第13 章 測試與調試
13.1 程式編譯正確嗎?
13.2 單元測試與純函式
13.3 自動產生測試
13.3.1 產生測試用例
13.3.2 基於規則的測試
13.3.3 比較測試
13.4 測試基於monad 的並發系統
總結

作者簡介

Ivan Čukić 在貝爾格勒數學系教授現代C++技術和函式式編程。他從1998 年開始使用C++。在以前和攻讀博士學位時研究函式式編程,他套用函式式編程技術編寫了全球數億人使用的真實項目。Ivan是KDE 的核心開發人員,KDE 是*大的開源C++項目。

相關詞條

熱門詞條

聯絡我們