C#函數式編程:編寫更優質的C#代碼 | 被動收入的投資秘訣 - 2024年7月

C#函數式編程:編寫更優質的C#代碼

作者:(美)恩里科·博南諾
出版社:清華大學
出版日期:2019年01月01日
ISBN:9787302510550
語言:繁體中文
售價:512元

函數式編程將改變你思考代碼的方式!利用FP技術,C#開發人員可極大地提升狀態管理、併發處理和事件處理能力,並更好地長期維護代碼。C#提供了靈活性,使你能充分利用函數式技術的優勢。《C#函數式編程 編寫更優質的C#代碼》從全新視角賦予你強大力量。
 
《C#函數式編程 編寫更優質的C#代碼》引導你在C#語言中使用函數式思想來解決現實問題;首先介紹函數式編程的原理,分析如何借助C#語言特性實現函數式編程,然後在多個緊貼實用的示例的引導下,講述函數組合、資料流程編程、不可變資料結構以及使用LINQ構建單子組合等主題。

Enrico Buonanno

畢業于哥倫比亞大學計算機科學系,是一名出色的開發人員、架構師和培訓師,擁有15年的工作經驗。

前言

《C#函數式編程 編寫更優質的C#代碼》旨在展示如何利用C#中的函數式技術編寫簡潔、優雅、健壯和可維護的代碼。

《C#函數式編程 編寫更優質的C#代碼》讀者對象

《C#函數式編程 編寫更優質的C#代碼》是為那些具有雄心壯志的開發人員所編寫的。你需要瞭解C#語言和.NET框架。你需要具備開發實際應用的經驗,熟悉OOP的概念、模式和最佳實踐。並且,你正在尋求通過學習函數式技術來擴展編程技能,以便可以充分利用C#的多範式語言特性。如果你正在嘗試或正在計畫學習一門函數式語言,那麼《C#函數式編程 編寫更優質的C#代碼》也將是非常有價值的,因為你將學習如何在一門你所熟悉的語言上進行函數式思考。改變自己的思考方式是很難的;而一旦做到,那麼學習任何特定語言的語法將變得相對容易。

《C#函數式編程 編寫更優質的C#代碼》的組織結構

全書共15章,分為3個部分:

● 第Ⅰ部分介紹函數式編程的基本技術和原理。我們將初窺函數式編程是什麼,以及C#是如何支援函數式編程風格的。然後,將研究高階函數的功能、純函數及其與可測性的關係、類型和函數簽名的設計,以及如何將簡單的函數組合到複雜的程式中。在第Ⅰ部分的最後,你將很好地感受到一個用函數式風格所編寫的程式是什麼樣的,以及這種風格所帶來的好處。

● 第Ⅱ部分將加快速度,轉向更廣泛的關注點,例如函數式的錯誤處理、模組化和組合應用,以及理解狀態和表示變化的函數式方法。到第Ⅱ部分結束時,你將掌握一系列工具的用法,將能利用函數式方法來有效地完成許多編程任務。

● 第Ⅲ部分將討論更高級的主題,包括惰性求值、有狀態計算、非同步、資料流程和併發性。第Ⅲ部分的每章都介紹一些重要技術,它們可能徹底改變你編寫軟體的方式和思考方式。

你會在每章中找到更詳細的主題分類,並在閱讀任何特定章節之前,都能從《C#函數式編程 編寫更優質的C#代碼》的內封瞭解到需要預先閱讀哪些章節。

為實際應用編碼

接資料庫、驗證HTTP請求;對於這些事情,你可能已經知道如何做了,但你將用函數式思維的新視角來重新看待它們。

在《C#函數式編程 編寫更優質的C#代碼》中,我使用了一個長期運行的例子來說明在編寫LOB應用時,FP是如何提供幫助的。為此,我選擇了一個線上銀行應用,它是虛擬的Codeland銀行(BOC) ——我知道這或許有些生搬硬套了,但至少它有了必需的三個字母的縮寫。由於大多數人都可訪問線上銀行設施,因此很容易想像其所需的功能,並且清楚地看到所討論的問題是如何與實際應用關聯的。

我也使用了場景來說明如何解決函數式風格中典型的編程問題。在實際的例子和FP概念之間的不斷反復,將幫助我們彌合理論與實踐之間的差異。

利用函數式庫

諸如C#的語言具有函數式特性,但為了充分利用這些特性,你將經常使用便於實現常見任務的庫。Microsoft已經提供了幾個庫,以便進行函數式風格的編程,包括:

● System.Linq——這是一個功能庫。我假定你是熟悉它的,因為它是.NET的一個重要組成部分。

● System.Collections.Immutable——這是一個不可變集合的庫,第9章將開始使用它。

● System.Reactive——這是.NET的Reactive Extensions的實現,允許你使用資料流程,第14章將討論這些資料流程。

當然還有其他許多重要的類型和功能未列舉,這些都是FP的主要部分。因此,一些獨立的開發人員已經編寫了一些開源的代碼庫來填補這些空白。到目前為止,其中最完整的是LanguageExt,這是由Paul Louth編寫的一個庫,用於在進行函數式編碼時改進C#開發人員的體驗。

《C#函數式編程 編寫更優質的C#代碼》並沒有直接使用LanguageExt;相反,將向你展示如何開發自己的函數式實用工具庫,且將其命名為LaYumba.Functional,儘管它與LanguageExt在很大程度上是重疊的,但這在教學方面會更有用,原因有如下幾點:

● 在《C#函數式編程 編寫更優質的C#代碼》出版後,將保持代碼的穩定。

● 你可以透過現象看本質,將看到看似簡單實則強大的函數式構造。

● 你可以專注於基本要素:我將以最純粹的形式向你展示這些構造,這樣你就不會被一個完整的庫所處理的細節和邊緣情況分散注意力。

代碼約定和下載

代碼示例使用了C# 7,大部分與C# 6相容。C# 7中專門介紹的語言特性僅用於第10章及之後章節(另外,1.2節的幾個示例中明確地展示了C# 7)。可在REPL中執行許多較短的代碼片段,從而獲得動手練習的即時回饋。更多的擴展示例可通過下載,其中還配有練習的設置和解決方案。

《C#函數式編程 編寫更優質的C#代碼》中的代碼清單重點討論了正在討論的主題,因此可能會省略命名空間(namespace)、using語句、簡單的構造函數,或先前代碼清單中出現的並保持不變的程式碼片段。如果你想查看代碼清單的完整編譯版本,可在代碼存儲庫中找到它。


相關書籍