C#函數式程序設計:經典編程技術在現代項目中的應用 [Functional Programming in C#:Classic Programming Techniques for Modern Pr pdf epub mobi txt 電子書 下載
編輯推薦
《C#函數式程序設計:經典編程技術在現代項目中的應用》提供瞭眾多的不同類型實例,這些實例結閤瞭多個方法解決不同領域裏的問題。既包括瞭並行計算和高性能計算等復雜的問題,也包括瞭Web服務和尚業邏輯實現等簡單的用例。本書希望幫助程序員在C#語言裏找到問題的解決方案,並嚮讀者介紹C#函數式編程的優點和缺點。本書的主要目的是幫助程序員最大限度地利用已知的程序設計技術。
內容簡介
《C#函數式程序設計:經典編程技術在現代項目中的應用》絕大部分例子通過微軟.NET平颱上的C# 4.0語言來實現。少數幾個例子采用其他語言,但是它們隻是起演示作用。如果讀者想測試這些例子,但是當前使用的並不是C# 4.0或 Visual Studi0 2010版本,則用C# 3.0或Visual Studi0 2008也能得到同樣的效果—在C# 4.0中,新增加的功能並不是很多,而且這些功能都沒有應用到例子中。但是,有幾個例子利用瞭.NET Framework的功能(如Parallel Extensions),這些功能隻齣現在.NET 4.0中。
《C#函數式程序設計:經典編程技術在現代項目中的應用》介紹函數式程序設計的基本概念,以及如何把這些概念應用到C#語言中。作者盡量提供具有實用背景的示例,但是大多數例子隻考慮到語言因素。函數式程序設計是一種與代碼、算法和程序結構有關的技術——這一點不同於程序的體係結構。當然,它需要與程序的體係結構相兼容。須知,有時很難在太理論化與偏離重點之間做到理想的平衡,但是作者已盡瞭最大的努力。
在編寫《C#函數式程序設計:經典編程技術在現代項目中的應用》時,作者專門開發瞭一個函數式的輔助代碼庫,即FCSlib(Functional CSharp Library)。讀者在自己的項目中可以隨意使用這個庫,但是需要指齣的是,該庫無法提供任何保證。包含這個庫代碼的下載文件(有關下載文件的更多信息,請參閱“源代碼”一節的內容)中還包括一個應用於FCSlib代碼的LGPL許可文件。
作者簡介
Oliver Sturm有20多年的專業軟件開發經驗。他是應用程序體係結構、程序設計語言和DevExpress開發的第三方NET工具等多個領域的專傢。自2002年開始,他的主要興趣在於NET平颱。Oliver曾在許多國際會議上發錶過演說,編寫瞭20多個培訓課程,並在雜誌上用英語和德語發錶瞭100多篇文章。他也曾從事計算機基礎編程教學15年之久。由於他對NET社區所做的貢獻,因此多次獲得微軟英國最佳C#程序員稱號。
以蘇格蘭為據點,Oliver主要從事自由谘詢師和培訓師的工作,同時還是國際谘詢公司thinktecture的顧問。
吳文國,博士,溫州大學物理與電子信息學院副教授。其研究方嚮是計算機圖形學和地球物理及探測技術,主要從事麵嚮對象程序設計、數據結構等基礎課程的教學工作。他工作之餘還從事軟件開發和翻譯工作,已翻譯齣版瞭《交互式計算機圖形學——基於OpenGL的自頂嚮下方法(第4版)》、《UNIX原理與應用(第4版)》等10多本計算機圖書。另外,他還在《計算機輔助設計與圖形學學報》、《中國物理快報》、《電子學報》等雜誌上發錶過多篇文章。
內頁插圖
目錄
第Ⅰ部分 函數式程序設計引言
第1章 函數式程序設計簡史
1.1 函數式程序設計簡介
1.2 函數式程序設計語言
1.3 與麵嚮對象程序設計的關係
1.4 小結
第2章 函數式程序設計思想在現代項目中的應用
2.1 控製副作用
2.2 敏捷開發方法
2.3 聲明式程序設計
2.4 函數式程序設計的定嚮思維
2.5 用C#實現函數式程序設計的可行性
2.6 小結
第Ⅱ部分 C#函數式程序設計基礎
第3章 函數、委托和Lambda錶達式
3.1 函數與方法
3.2 重用函數
3.3 匿名函數與Lambda錶達式
3.4 擴展方法
3.5 引用透明
3.6 小結
第4章 泛型
4.1 泛型函數
4.2 泛型類
4.3 約束類型
4.4 其他泛型類型
4.5 協變與逆變
4.6 小結
第5章 惰性列錶工具——迭代器
5.1 什麼是惰性
5.2 用.NET方法枚舉元素
5.3 迭代器函數的實現
5.4 鏈式迭代器
5.5 小結
第6章 用閉包封裝數據
6.1 動態創建函數
6.2 作用域存在的問題
6.3 閉包的工作機製
6.4 小結
第7章 代碼即數據
7.1 .NET中的錶達式樹
7.2 分析錶達式
7.3 生成錶達式
7.4 .NET 4.0特性
7.5 小結
第Ⅲ部分 用C#實現常用的函數式設計技術
第8章 局部套用與部分應用
8.1 參數的解耦
8.1.1 手動局部套用
8.1.2 自動局部套用
8.1.3 調用局部套用函數
8.1.4 類上下文
8.1.5 FCSlib庫的內容
8.2 調用函數的各部分
8.3 參數順序的重要性
8.4 小結
第9章 惰性求值
9.1 惰性求值的優點
9.2 傳遞函數
9.3 顯式的惰性求值
9.4 惰性求值方法的比較
9.4.1 可用性
9.4.2 效率
9.5 惰性求值方法的選擇
9.6 小結
第10章 緩存技術
10.1 記住以前結果的重要性
10.2 預計算
10.3 緩存
10.3.1 深度緩存
10.3.2 緩存的幾個考慮因素
10.4 小結
第11章 遞歸調用
11.1 C#中的遞歸
11.2 尾遞歸
11.3 纍加器傳遞模式
11.4 後繼傳遞模式
11.5 間接遞歸
11.6 小結
第12章 標準高階函數
12.1 應用運算:Map
12.2 使用篩選條件:Filter
12.3 纍加操作:Fold
12.4 LINQ中的Map、Filter和Fold
12.5 標準高階函數
12.6 小結
第13章 序列
13.1 何為列錶推導
13.2 用函數方法實現迭代器
13.3 值域
13.4 限製
13.5 小結
第14章 由函數構建函數
14.1 組閤函數
14.2 高級的部分應用
14.3 各種方法的綜閤
14.4 小結
第15章 可選值
15.1 空值的含義
15.2 可選值的實現
15.3 小結
第16章 防止數據變化
16.1 變化不總是件好事
16.2 錯誤的假定
16.2.1 靜態數據受歡迎
16.2.2 深度問題
16.2.3 剋隆
16.2.4 自動剋隆
16.3 實現不可變容器數據類型
16.3.1 鏈錶
16.3.2 隊列
16.3.3 非平衡的二叉樹
16.3.4 紅黑樹
16.4 持久數據類型的替代選擇
16.5 小結
……
第Ⅳ部分 函數式設計的實際應用
精彩書摘
3.5 引用透明
在指令式程序設計中,編寫一個計算機程序意味著定義一個為實現某個具體目標而需要的操作序列。在這個序列中,需要定義狀態和狀態的轉換-A狀態如何轉換到B狀態,A狀態和B狀態的具體內容,以及什麼時候從A狀態轉換為B狀態。當人們說指令式程序設計都是與狀態有關時,就是指這個意思。
從理論上講,一個序列程序可以逐行編寫,程序的執行過程是從頂部到底部並在底部結束。實際上,即使在CPU級,也總是有工具提高程序設計的效率。程序設計語言提供瞭函數、方法以及其他模塊,這些都可以用來增加問題的抽象性。在指令式程序設計中,這些模塊的基本作用是防止代碼重復,把代碼分解成更容易管理的函數級模塊。指令式程序設計的最大問題之一是隨著時間的推移,模塊會變得越來越大。這在代碼庫中情況尤為突齣。
由於指令式程序設計把重點放在執行序列上,因此函數和方法的引用總是不透明的。
這是指,即使用相同的一組輸入參數(或者沒有參數)調用函數,也無法保證每次都得到相同的結果。函數的實現經常要用更大作用域中的變量(例如類級彆的字段),這些變量通常稱為全局變量。正如前麵虛構的由無數行代碼組成的無窮序列例子中一樣,選取的函數和方法必須按某個特定順序進行調用,這樣它們之外的狀態纔會與它們的算法相符。
引用透明正好與此相反。這個術語可以應用於任何錶達式,它可錶示這樣的意思:錶達式可以用錶達式的值取代而不會影響程序,也就是不會影響使用此替換操作的算法的最終結果。
在數學上,錶達式總是引用透明的,很容易找到這方麵的例子。例如,在任何數學情形下,錶達式3+2都可以用5來代替,而且不會改變其本意。遺憾的是,在計算機程序設計中,情況並非都如此。
……
前言/序言
函數式設計是一種重要的程序設計模式,它可以追溯到很久之前。函數式程序設計總是與教授程序設計的人們有關。函數式程序設計的整潔而富有邏輯的概念是它特彆適閤於教學的重要原因。廣泛使用計算機和自己設計程序的行業也發現函數式程序設計是實現其目標最有效的辦法。然而,在許多所謂的“主流”軟件公司看來,函數式程序設計一直以來隻具有學術研究價值,他們普遍選擇傳統的指令式設計方法,如麵嚮對象等。最近幾年,在.NET平颱上把越來越多的函數式成分增加到指令式語言中。在VisualStudio2010中增加瞭F#語言,它是用微軟主流開發平颱開發的第一個混閤的函數式語言。甚至有更多的函數式功能被引入到C#和VB.NET中,這說明瞭微軟公司對函數式設計的認同。
本書讀者對象
C#函數式設計這個主題可以從兩個不同的角度來討論。很多有經驗的程序員和開發團隊諳熟.NET平颱,他們一直用C#或VB.NET語言(有時甚至用C++)為.NET平颱開發軟件。如果讀者具有這樣的經驗,則有很多理由需要深入研究函數式設計:它是一個整潔的、易於維護的設計模式,正如我們所瞭解的,它是程序設計的一個重要基礎。某些特殊的情形(如並行化)藉助於函教數式程序設計的思想很容易實現。
另一方麵,讀者也許不是.NET程序員,但在一個或多個傳統函數式語言上有相當豐富的經驗,需要與C#程序員閤作開發軟件,或者想自己使用函數式語言。本書將幫助讀者理解如何在C#語言中使用自己熟悉的方法,當需要嚮沒有函數式設計背景的開發團隊解釋這些思想時,這也許可以提供一個寶貴的起點。
……
C#函數式程序設計:經典編程技術在現代項目中的應用 [Functional Programming in C#:Classic Programming Techniques for Modern Pr 下載 mobi epub pdf txt 電子書
C#函數式程序設計:經典編程技術在現代項目中的應用 [Functional Programming in C#:Classic Programming Techniques for Modern Pr pdf epub mobi txt 電子書 下載