| 特性 | 物件導向 (C#/VB) | 函數式 (F#) | 動態 (IronPython/IronRuby) |
|---|---|---|---|
| 核心概念 | 狀態封裝、多型 | 不可變數據、純函數 | 後期綁定、鴨子型別 |
| 型別系統 | 靜態、編譯期檢查 | 靜態+型別推斷 | 動態、執行期綁定 |
| 副作用 | 常見、需手動控制 | 極小化、避免狀態變異 | 靈活、執行期決定 |
| 並行優勢 | 需同步機制 | 天生適合(無共享狀態) | 視實作而定 |
| 原型開發 | 較繁瑣 | 簡潔 | 極快 (REPL 循環) |
// F# Map 實現
let map func myList =
[ for x in myList -> func x ]
let data = [1 .. 5]
let increment x = x + 1
map increment data // [2; 3; 4; 5; 6]
[ for x in 1..5 -> x + 1 ] 一行完成lazy (2 * 2) 建立輕量代碼指標,Lazy.force 才真正計算
class Duck { def Quack() { puts "Quack!" } }
class Cow { def Quack() { puts "Cow's don't quack, they Mooo!" } }
def QuackQuack(duck) { duck.Quack() }
QuackQuack(Duck.new()) // "Quack!"
QuackQuack(Cow.new()) // "Cow's don't quack, they Mooo!"
只關心物件是否有 Quack 方法,執行期動態查找調用。
託管 API 允許在應用內嵌入 IronPython/IronRuby:
var q = from c in customers
where c.Country == "Australia"
select c;
var 型別推斷
Dim rss = From cust In customers
Where cust.Country = "USA"
Select <%= cust.Name %> ...
Dim rssFeed =
rssFeed...(0).ReplaceAll(rss) // "..." 後期綁定動態查找
... 軸向運算子 = 動態後代查找CTS (通用型別系統) 使語言互操作無縫。C#/VB 正吸收動態與函數式優勢:
dynamic)聲明式程式設計 (XAML/WF)、邏輯程式設計 (Prolog) 等亦將在特定領域發揮作用。身為 .NET 開發者,擁有最豐富的語言工具箱,正是最大優勢。