標籤:blog http 使用 io 資料 2014 ar 問題
第二章函數編程的核心概念
本章介紹
■瞭解概念和基礎
■不可變資料編程
■函數式代碼的推論
■函數式值和資料類型
如果你問三個函數程式員,什麼是函數範式最基本的方面,很可能有三個不同的答案。原因是函數編程已經存在很長時間了,各種不同的程式設計語言應用範圍很廣泛;每種語言強調的重點不同,但對於其他的語言來說,可能並不重要;但其中的大部分概念在所有的函數式語言中都有所表現。
本章的中央部分側重於這些共同的概念,探討函數式程式員工具集的基本特徵和技術。我們將宏觀地研究這些概念,你將看到如何組合起來,形成連續的方式解決問題。
我們首選討論函數式程式如何表示、改變程式狀態。在物件導向編程中,狀態由對象承載,而在函數編程中,函數和資料類型擔趣了這個關鍵角色;接下來,我們會看到支援聲明式編程風格的語言功能,我們在第一章曾介紹過;最後,我們將討論類型,看類型是如何協助驗證程式正確性的。這個方面不是所有函數語言都支援的,但卻是許多語言的核心(包括 OCaml、F# 和 Haskell)。這種類型檢查非常先進,在許多方面不同於 C# 中使用過的。
我們還不會過多地進行編程,只是大致瞭解一些主要概念,以及有關函數程式的更好感覺。補充材料“接下來本章講什嗎?”給出了本章結構的概覽。我們在第一章討論過一些概念,但只關注結論,在本章,我們會分析其原理。
接下來本章講什嗎?
第一章,我們關注兩個概念:不可變性和聲明式風格,這裡,我們將介紹一些使其成為可能的語言功能;還將討論類型,這是這本書中的另一個基本概念。
在 2.1 節,我們將首先講一點函數編程的題外話,探討一下其數學背景。閱讀這一節不是必須的,但可能很有意義,因為它說明了許多概念的源頭;之後,將回到更具體的函數編程,討論不可變的資料結構,以及如何用來寫程式(2.2.3 節);在 2.3.2 節,我們先看一下用函數語言寫聲明式代碼的準系統,比如高階函數(higher-order function);我們還會看到,在 F# 中,類型如何防止許多常見的編程錯誤(2.4.4節)。
這一章我們關注函數編程的概念。首先探究其理論基礎,會忽略所有的細節,使用一個簡單的樣本來解釋核心概念。