C#函數(shù)式程序設(shè)計

出版時間:2013-1  出版社:清華大學(xué)出版社  作者:(英)斯圖姆(Sturm, O.) 著  譯者:吳文國  
Tag標(biāo)簽:無  

內(nèi)容概要

函數(shù)式設(shè)計是一種重要的程序設(shè)計模式,它可以追溯到很久之前。函數(shù)式程序設(shè)計總是與教授程序設(shè)計的人們有關(guān).函數(shù)式程序設(shè)計的整潔而富有邏輯的概念是它特別適合于教學(xué)的重要原因。廣泛使用計算機(jī)和自己設(shè)計程序的行業(yè)也發(fā)現(xiàn)函數(shù)式程序設(shè)計是實(shí)現(xiàn)其目標(biāo)最有效的辦法。然而,在許多所謂的“主流”軟件公司看來,函數(shù)式程序設(shè)計一直以來只具有學(xué)術(shù)研究價值,他們普遍選擇傳統(tǒng)的指令式設(shè)計方法,如面向?qū)ο蟮取?br />最近幾年,在NET平臺上把越來越多的函數(shù)式成分增加到指令式語言中。在VisualStudio2010中增加了F#語言,它是用微軟主流開發(fā)平臺開發(fā)的第一個混合的函數(shù)式語言。甚至有更多的函數(shù)式功能被引入到C#和VBNET中,這說明了微軟公司對函數(shù)式設(shè)計的認(rèn)同。

作者簡介

作者:(英國)斯圖姆(Oliver Sturm) 譯者:吳文國  Oliver Sturm有20多年的專業(yè)軟件開發(fā)經(jīng)驗。他是應(yīng)用程序體系結(jié)構(gòu)、程序設(shè)計語言和DevExpress開發(fā)的第三方.NET工具等多個領(lǐng)域的專家。自2002年開始,他的主要興趣在于.NET平臺。Oliver曾在許多國際會議上發(fā)表過演說,編寫了20多個培訓(xùn)課程,并在雜志上用英語和德語發(fā)表了l00多篇文章。他也曾從事計算機(jī)基礎(chǔ)編程教學(xué)15年之久。由于他對.NET社區(qū)所做的貢獻(xiàn),因此多次獲得微軟英國最佳C#程序員稱號。 吳文國,博士,溫州大學(xué)物理與電子信息學(xué)院副教授。其研究方向是計算機(jī)圖形學(xué)和地球物理及探測技術(shù),主要從事面向?qū)ο蟪绦蛟O(shè)計、數(shù)據(jù)結(jié)構(gòu)等基礎(chǔ)課程的教學(xué)工作。他工作之余還從事軟件開發(fā)和翻譯工作,已翻譯出版了《交互式計算機(jī)圖形學(xué)——基于OpenGL的自頂向下方法(第4版)》、《UNIX原理與應(yīng)用(第4版)》等10多本計算機(jī)圖書。另外,他還在《計算機(jī)輔助設(shè)計與圖形學(xué)學(xué)報》、《中國物理快報》、《電子學(xué)報》等雜志上發(fā)表過多篇文章。

書籍目錄

第1部分函數(shù)式程序設(shè)計引言 第1章函數(shù)式程序設(shè)計簡史 1.1函數(shù)式程序設(shè)計簡介 1.2函數(shù)式程序設(shè)計語言 1.3與面向?qū)ο蟪绦蛟O(shè)計的關(guān)系 1.4小結(jié) 第2章 函數(shù)式程序設(shè)計思想在現(xiàn)代項目 中的應(yīng)用 2.1控制副作用 2.2敏捷開發(fā)方法 2.3聲明式程序設(shè)計 2.4函數(shù)式程序設(shè)計的定向思維 2.5用C#實(shí)現(xiàn)函數(shù)式程序設(shè)計的可行性 2.6小結(jié) 第Ⅱ部分C撐函數(shù)式程序設(shè)計基礎(chǔ) 第3章函數(shù)、委托和Lambda表達(dá)式 3.1函數(shù)與方法 3.2重用函數(shù) 3.3匿名函數(shù)與Lambda表達(dá)式 3.4擴(kuò)展方法 3.5引用透明 3.6小結(jié) 第4章泛型 4.1泛型函數(shù) 4.2泛型類 4.3約束類型 4.4其他泛型類型 4.5協(xié)變與逆變 4.6 小結(jié) 第5章惰性列表工具——迭代器 5.1什么是惰性 5.2用.NET方法枚舉元素 5.3迭代器函數(shù)的實(shí)現(xiàn) 5.4鏈?zhǔn)降?5.5 小結(jié) 第6章用閉包封裝數(shù)據(jù) 6.1動態(tài)創(chuàng)建函數(shù) 6.2作用域存在的問題 6.3 閉包的工作機(jī)制 6.4小結(jié) 第7章代碼即數(shù)據(jù) 7.1.NET中的表達(dá)式樹 7.2分析表達(dá)式 7.3生成表達(dá)式 7.4.NET 4.0特性 7.5 小結(jié) 第Ⅲ部分用C#實(shí)現(xiàn)常用的函數(shù)式設(shè)計技術(shù) 第8章局部套用與部分應(yīng)用 8.1參數(shù)的解耦 8.1.1手動局部套用 8.1.2 自動局部套用 8.1.3調(diào)用局部套用函數(shù) 8.1.4類上下文 8.1.5 FCSlib庫的內(nèi)容 8.2調(diào)用函數(shù)的各部分 8.3參數(shù)順序的重要性 8.4小結(jié) 第9章惰性求值 9.1惰性求值的優(yōu)點(diǎn) 9.2傳遞函數(shù) 9.3顯式的惰性求值 9.4惰性求值方法的比較 9.4.1可用性 9.4.2效率 9.5惰性求值方法的選擇 9.6小結(jié) 第10章緩存技術(shù) 10.1記住以前結(jié)果的重要性 10.2預(yù)計算 10.3 緩存 10.3.1深度緩存 10.3.2緩存的幾個考慮因素 10.4小結(jié) 第11章遞歸調(diào)用 11.1 C#中的遞歸 11.2尾遞歸 11.3累加器傳遞模式 11.4后繼傳遞模式 11.5間接遞歸 11.6小結(jié) 第12章標(biāo)準(zhǔn)高階函數(shù) 12.1應(yīng)用運(yùn)算:Map 12.2使用篩選條件:Filter 12.3累加操作:Fold 12.4 LINQ中的Map、Filter和Fold 12.5標(biāo)準(zhǔn)高階函數(shù) 12.6小結(jié) 第13章序列 13.1何為列表推導(dǎo) 13.2用函數(shù)方法實(shí)現(xiàn)迭代器 13.3值域 13.4限制 13.5 小結(jié) 第14章由函數(shù)構(gòu)建函數(shù) 14.1組合函數(shù) 14.2高級的部分應(yīng)用 14.3各種方法的綜合 14.4小結(jié) 第15章可選值 15.1空值的含義 15.2可選值的實(shí)現(xiàn) 15.3 小結(jié) 第16章防止數(shù)據(jù)變化 16.1變化不總是件好事 16.2錯誤的假定 16.2.1靜態(tài)數(shù)據(jù)受歡迎 16.2.2深度問題 16.2.3克隆 16.2.4 自動克隆 16.3 實(shí)現(xiàn)不可變?nèi)萜鲾?shù)據(jù)類型 16.3.1鏈表 16.3.2隊列 16.3.3非平衡的二叉樹 16.3.4紅黑樹 16.4持久數(shù)據(jù)類型的替代選擇 16.5小結(jié) 第17章單子 17.1類型類的概念 17.2單子的概念 17.3使用抽象的原因 17.4 Logger單子 17.5含糖語法 17.6用SelectMany方法建立綁定 17.7小結(jié) 第Ⅳ部分函數(shù)式設(shè)計的實(shí)際應(yīng)用 第18章函數(shù)式程序設(shè)計技術(shù)的綜合應(yīng)用 18.1重構(gòu) 18.1.1用Windows Forms UI實(shí)現(xiàn)列表篩選 18.1.2 Mandelbrot分形計算 18.2編寫新代碼 18.2.1使用靜態(tài)方法 18.2.2優(yōu)先考慮匿名函數(shù) 18.2.3優(yōu)先考慮高階函數(shù) 18.2.4優(yōu)先考慮不可變數(shù)據(jù) 18.2.5注意類中行為的實(shí)現(xiàn) 18.3尋找可以替代函數(shù)式設(shè)計的其他方法 18.3.1其他需要考慮的問題 18.3.2使用已有代碼 18.4小結(jié) 第19章MapReduce模式 19.1 MapReduce的實(shí)現(xiàn) 19.2問題的抽象 19.3小結(jié) 第20章 函數(shù)模塊化思想的應(yīng)用 20.1在應(yīng)用程序中執(zhí)行SQL代碼 20.2用部分應(yīng)用和預(yù)計算重寫函數(shù) 20.3小結(jié) 第21章函數(shù)式技術(shù)在現(xiàn)有項目中的應(yīng)用 21.1 .NET Framework 21.2 LINQ 21.2.1 LINQ to Objects 21.2.2 LINQ到查詢后臺 21.2.3并行化 21.3 Google MapReduce及其實(shí)現(xiàn) 21.4 NUnit 21.5小結(jié)

章節(jié)摘錄

版權(quán)頁:   插圖:   可以看出,可以根據(jù)受擴(kuò)展方法支持的字面類型調(diào)用擴(kuò)展方法,也可以根據(jù)此類型的變量調(diào)用擴(kuò)展方法。SecondElement方法甚至擴(kuò)展了一個泛型接口類型,在示例代碼中這個類型用傳入的int數(shù)組來實(shí)現(xiàn)。但是同一個接口可以由不同的集合類型來實(shí)現(xiàn),因此這個函數(shù)具有廣泛的應(yīng)用。使用一個可以為一大群類型打開一個函數(shù)的參數(shù)類型是值得推薦的做法,但是利用擴(kuò)展方法可以使得這樣的輔助函數(shù)變得容易使用,更加直觀。 在本書的后面章節(jié)中,讀者將會看到有關(guān)擴(kuò)展方法如何成為標(biāo)準(zhǔn).NET機(jī)制的基礎(chǔ)等令人感興趣的細(xì)節(jié)內(nèi)容,以及對許多標(biāo)準(zhǔn)擴(kuò)展方法的詳細(xì)介紹。 3.5 引用透明 在指令式程序設(shè)計中,編寫一個計算機(jī)程序意味著定義一個為實(shí)現(xiàn)某個具體目標(biāo)而需要的操作序列。在這個序列中,需要定義狀態(tài)和狀態(tài)的轉(zhuǎn)換——A狀態(tài)如何轉(zhuǎn)換到B狀態(tài),A狀態(tài)和B狀態(tài)的具體內(nèi)容,以及什么時候從A狀態(tài)轉(zhuǎn)換為B狀態(tài)。當(dāng)人們說指令式程序設(shè)計都是與狀態(tài)有關(guān)時,就是指這個意思。 從理論上講,一個序列程序可以逐行編寫,程序的執(zhí)行過程是從頂部到底部并在底部結(jié)束。實(shí)際上,即使在CPU級,也總是有工具提高程序設(shè)計的效率。程序設(shè)計語言提供了函數(shù)、方法以及其他模塊,這些都可以用來增加問題的抽象性。在指令式程序設(shè)計中,這些模塊的基本作用是防止代碼重復(fù),把代碼分解成更容易管理的函數(shù)級模塊。指令式程序設(shè)計的最大問題之一是隨著時間的推移,模塊會變得越來越大。這在代碼庫中情況尤為突出。 由于指令式程序設(shè)計把重點(diǎn)放在執(zhí)行序列上,因此函數(shù)和方法的引用總是不透明的。這是指,即使用相同的一組輸入?yún)?shù)(或者沒有參數(shù))調(diào)用函數(shù),也無法保證每次都得到相同的結(jié)果。函數(shù)的實(shí)現(xiàn)經(jīng)常要用更大作用域中的變量(例如類級別的字段),這些變量通常稱為全局變量。正如前面虛構(gòu)的由無數(shù)行代碼組成的無窮序列例子中一樣,選取的函數(shù)和方法必須按某個特定順序進(jìn)行調(diào)用,這樣它們之外的狀態(tài)才會與它們的算法相符。 引用透明正好與此相反。這個術(shù)語可以應(yīng)用于任何表達(dá)式,它可表示這樣的意思:表達(dá)式可以用表達(dá)式的值取代而不會影響程序,也就是不會影響使用此替換操作的算法的最終結(jié)果。 在數(shù)學(xué)上,表達(dá)式總是引用透明的,很容易找到這方面的例子。例如,在任何數(shù)學(xué)情形下,表達(dá)式3+2都可以用5來代替,而且不會改變其本意。遺憾的是,在計算機(jī)程序設(shè)計中,情況并非都如此。 有些表達(dá)式或函數(shù)絕對不可以透明引用,因為它們的作用就是返回改變后的值,或者每次返回不同的值。在.NET中,這些例子包括DateTime.Now、File.ReadByte()或Console.Read()。在C#中,返回值類型為void的函數(shù)不可以作為表達(dá)式,因此它們不能透明引用。 函數(shù)式程序設(shè)計中一個重要的概念是在函數(shù)實(shí)現(xiàn)時避免出現(xiàn)副作用。這個主題與引用透明的主題非常接近。純函數(shù)是指一個不會有任何副作用的函數(shù),即一個只從一組輸入?yún)?shù)計算得到返回值的函數(shù)。這樣的函數(shù)可以調(diào)用其他函數(shù)作為其算法的一部分。它可以訪問作用域之外的數(shù)值,前提是它們是引用透明而且絕對不會發(fā)生變化的。想象一下,一個算法引用Math.PI值——這是允許的,因為被訪問的對象是一個常量。

編輯推薦

《C#函數(shù)式程序設(shè)計:經(jīng)典編程技術(shù)在現(xiàn)代項目中的應(yīng)用》提供了眾多的不同類型實(shí)例,這些實(shí)例結(jié)合了多個方法解決不同領(lǐng)域里的問題。既包括了并行計算和高性能計算等復(fù)雜的問題,也包括了Web服務(wù)和尚業(yè)邏輯實(shí)現(xiàn)等簡單的用例?!禖#函數(shù)式程序設(shè)計:經(jīng)典編程技術(shù)在現(xiàn)代項目中的應(yīng)用》希望幫助程序員在C#語言里找到問題的解決方案,并向讀者介紹C#函數(shù)式編程的優(yōu)點(diǎn)和缺點(diǎn)?!禖#函數(shù)式程序設(shè)計:經(jīng)典編程技術(shù)在現(xiàn)代項目中的應(yīng)用》的主要目的是幫助程序員最大限度地利用已知的程序設(shè)計技術(shù)。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    C#函數(shù)式程序設(shè)計 PDF格式下載


用戶評論 (總計0條)

 
 

 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號-7