C++ 函數式編程 (Functional Programming in C++: How to improve your C++ programs using functional techniques)
Ivan Cukic 程繼洪,孫玉梅,婁山佑譯
- 出版商: 機械工業
- 出版日期: 2020-01-01
- 售價: $594
- 貴賓價: 9.5 折 $564
- 語言: 簡體中文
- 頁數: 262
- 裝訂: 平裝
- ISBN: 7111641981
- ISBN-13: 9787111641988
-
相關分類:
C++ 程式語言
- 此書翻譯自: Functional Programming in C++: How to improve your C++ programs using functional techniques (Paperback)
立即出貨
買這商品的人也買了...
-
$580$493 -
$534$507 -
$1,200$792 -
$680$537 -
$280$218 -
$680$530 -
$594$564 -
$594$564 -
$594$564 -
$254JavaScript ES6 函數式編程入門經典
-
$301JavaScript 函數式編程指南
-
$403OpenCV 4 電腦視覺項目實戰, 2/e
-
$1,200$948 -
$380$296 -
$403Python 函數式編程, 2/e (Functional Python Programming: Discover the power of functional programming, generator functions, lazy evaluation, the built-in itertools library, and monads, 2/e)
-
$301cURL 必知必會
-
$480$360 -
$680$510 -
$620$484 -
$780$585 -
$1,368$1,300 -
$352C++ 新經典:模板與泛型編程
-
$654$621 -
$1,200$948 -
$780$616
相關主題
商品描述
《C++函數式編程》介紹了C++的面向函數式編程。
面向函數式編程是繼面向對象編程之後又一編程範式,解決了命令式(過程式)
編程與面向對象編程中出現的問題,是一種J具潛力的編程方式,值得研究學習。
主要講解了函數對象、純潔性(Purity)、惰性求值、range、函數式數據結構、
代數類型及模式匹配、monad、模板元編程、並發系統的函數式設計,
以及測試與調試等有關內容,還介紹了使用原有函數創建新函數的知識。
《C++函數式編程》不僅可以作為C++程序員、編程愛好者以及軟件工程師學習函數式編程的參考書,
還可以作為高等院校C++編程語言課的GJ教材
目錄大綱
目錄
譯者序
致謝
前言
關於本書
關於作者
D1章函數式編程簡介
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將會學到什麼
總結
D2章函數式編程之旅
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使用折疊實現
總結
D3章函數對象
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包裝函數對象
總結
D4章以舊函數創建新函數
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鍵值對列表反轉
總結
D5章純潔性:避免可變狀態
5.1可變狀態帶來的問題
5.2純函數和引用透明
5.3無副作用編程
5.4並發環境中的可變狀態與不可變狀態
5.5 const的重要性
5.5.1邏輯const與內部const
5.5.2對於臨時值優化成員函數
5.5.3 const的缺陷
總結
D6章惰性求值
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純潔性與表達式模板
總結
D7章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統計詞頻
總結
D8章函數式數據結構
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其他操作和位圖向量樹的整體效率
總結
D9章代數數據類型及模式匹配
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的強大匹配功能
總結
D10章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組合
總結
D11章模板元編程
11.1編譯時操作類型
11.1.1推斷類型調試
11.1. 2編譯時的模式匹配
11.1.3提供類型的元信息
11.2編譯時檢查類型的屬性
11.3構造科里化函數
11.3.1調用所有可調用的
11.4 DSL構建塊
總結
D12章並發系統的函數式設計
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編寫分佈式系統
總結
D13章測試與調試
13.1程序編譯正確嗎?
13.2單元測試與純函數
13.3自動產生測試
顯示全部信息