天天看點

Scala 學習筆記 - 1 - 理論基礎

從語言範式說到函數式範式

範式(Paradigm)是指用來區分一套相關的概念或思維模式的科學原則。目前主要存在如下三種程式範式:

Imperative programming

Functional programming

Logic programming

我們常說道的Object-orentied programming可以看成是以上三種範式的一種正交的範式。

  我們先看Imperative programming的基本特征,如下:

可被修改的變量(Mutable Variable)

使用指派的形式(Using assignment)

使用控制結構,例如, if-else, for loop, break, continue

Von Neumann機器的順序指令方式可以很好地描述Imperative programming.

Scala 學習筆記 - 1 - 理論基礎

   Imperative pramgramming跟Von Neumann機器的對應關系如下:

       可變變量    相對于   記憶體單元

       變量引用    相對于   裝載指令

       變量指派    相對于   存儲指令

       控制結構    相對于   跳轉指令

Imperative programming是逐條,逐句進行程式設計的的範式。我們當然有更進階抽象的需求。我們需要集合,多項式,字元串,文檔等等。我們這裡說的需要是在語言的原生的層面。理想的情況是我們有針對這些更進階抽象的範式。

  這種更高抽象的理論我們希望它具有如下特性:

 一些資料類型

 基于這些類型的操作

 描述數值跟操作直接的規則

這裡很重要一點就是 不包含狀态改變的特性。

  就無狀态變化這點我們可以看多項式理論。

例如多項式 (a*x+b)+(c*x+d)。多項式理論裡提供轉換操作如(a*x+b)+(c*x+d)= (a+c)*x+(b+d)。多項式理論裡沒有提供類似通過改變多項式的系數還能保持多項式不變的操作。不變狀态是我們這裡強調的重點。

 總結起來我們可以定義一種更高抽象的程式設計範式,這種範式強調于提供函數來涵蓋所有的操作,不支援可變性并且具有強大的函數組合功能。這就是基于lamda演算數學理論的進階抽象概念。這裡要再次強調不可以變性。

 基于上面的總結,我們來看一下由此衍生的函數式程式設計,

嚴格意義上的函數式程式設計沒有可變變量,沒有指派,沒有loops,也沒有其他的imperative控制結構。隻強調函數作為第一等公民的程式設計。

就更寬泛的意義來說,函數式程式設計所有強調函數作為第一等公民的程式設計就是函數式程式設計。

        待續。。。。。