- 編程與類型系統
- (美)弗拉德·里斯庫迪亞
- 1479字
- 2021-01-29 11:51:20
About this book 關于本書
本書旨在告訴你如何使用類型系統編寫更好、更安全的代碼。雖然大部分介紹類型系統的圖書更加關注形式方面的討論,但本書采用了偏向實用的做法。本書包含你在日常工作中可能遇到的許多示例、應用和場景。
讀者對象
本書主要針對想要學習類型系統的工作原理以及使用類型系統來提高代碼質量的程序員。你應該具備一些使用面向對象編程語言(如Java、C#、C++或JavaScript/TypeScript)的經驗,還應該有一些軟件設計經驗。雖然本書的代碼示例是基于TypeScript的,但是大部分內容是普遍適用的。事實上,本書的代碼示例并非總是使用TypeScript特有的功能。在編寫代碼示例時,我盡可能讓熟悉其他編程語言的程序員也容易理解它們。雖然本書會介紹各種技術來幫助你編寫健壯的、可組合的、封裝程度更好的代碼,但是也假定了你知道為什么我們希望獲得這些特性。此外,本書側重類型系統的實際應用,因此涉及的數學理論較少,但是你應該熟悉基本的代數概念,如函數和集合等。
本書的組織方式
本書包含11章,涵蓋類型編程的各個方面。
? 第1章介紹類型和類型系統,討論它們為什么存在以及為什么有用。我們將討論類型系統的類型,并解釋類型強度、靜態類型和動態類型。
? 第2章介紹大部分語言中都有的基本類型,以及在使用這些類型時需要注意的地方。常用的基本類型包括空類型、單元類型、布爾類型、數值類型、字符串類型、數組類型和引用類型。
? 第3章介紹組合,包括把類型組合起來定義新類型的各種方式,還介紹實現訪問者設計模式的不同方式,并定義代數數據類型。
? 第4章討論類型安全—如何使用類型來減少歧義以及防止錯誤。本章還介紹如何使用類型轉換在代碼中添加或移除類型信息。
? 第5章介紹函數類型,以及當我們獲得了創建函數變量的能力后能夠做些什么,還展示實現策略模式和狀態機的不同方式,并介紹基本的map()、filter()和reduce()算法。
? 第6章以前一章為基礎,展示函數類型的一些高級應用,包括簡化的裝飾器模式、可恢復的函數和異步函數。
? 第7章介紹子類型,并討論類型兼容。我們會看到頂層類型和底層類型的應用,以及從子類型的角度看,和類型、集合和函數類型之間的關系。
? 第8章介紹面向對象編程的關鍵元素,以及什么時候使用每種元素,并討論接口、繼承、組合和混入。
? 第9章介紹泛型編程及其第一種應用—泛型數據結構。泛型數據結構把數據的布局與數據本身分隔開。迭代器支持遍歷這些數據結構。
? 第10章繼續介紹泛型編程,討論泛型算法及迭代器的分類。泛型算法是能夠在不同數據類型上重用的算法。迭代器用作數據結構和算法之間的接口,并且能夠根據迭代器的能力啟用不同的算法。
? 第11章介紹高階類型、函子和單子的概念,以及如何使用它們,并為進一步學習提供一些建議。
本書中的各章以前面章節中的概念作為基礎,故建議讀者按順序閱讀。雖然如此,但是本書介紹的4大主題相對獨立:前4章介紹基礎知識;第5~6章介紹函數類型;第7~8章介紹子類型;第9~11章介紹泛型編程。
關于代碼
本書以程序清單和嵌入在正文中的方式給出了許多源代碼示例。這兩種形式的代碼都采用了等寬字體。有時候,代碼還會被加粗顯示,表示這部分代碼相比該章前面的步驟發生了變化,例如,在現有的一行代碼中添加了新特性。
在多數情況下,我調整了最初源代碼的格式,添加了換行,調整了縮進,以適應版面空間。在少數情況下,即使這樣調整后代碼也無法放到一行,此時程序清單中會包含代碼行延續標記()。另外,當在正文解釋了程序清單中的代碼時,常常會移除源代碼中的注釋。許多程序清單都帶有代碼標注,用于解釋重要的概念。
本書的所有代碼示例都可以在GitHub上獲取,網址為https://github.com/vladris/programming-with-types/。生成代碼時,使用了TypeScript 3.3版本,針對ES6標準,并使用了strict設置。
- 測試驅動開發:入門、實戰與進階
- Building a RESTful Web Service with Spring
- C和C++安全編碼(原書第2版)
- Web Development with Django Cookbook
- 物聯網系統開發:從0到1構建IoT平臺(第2版)
- Visual Basic程序設計習題解答與上機指導
- Kinect for Windows SDK Programming Guide
- Java編程技術與項目實戰(第2版)
- Visual Basic程序設計
- RubyMotion iOS Develoment Essentials
- 貫通Tomcat開發
- Delphi開發典型模塊大全(修訂版)
- Visual C++程序設計與項目實踐
- Learning D
- Python Penetration Testing Essentials