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

  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.

wKiom1VhO0_SORpqAABL81alQmw042.jpg

   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控制結構。只強調函數作爲第一等公民的編程。

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




        待續。。。。。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章