從OOP和FP看蘋果Swift語言與Scala比較

banq發表於2014-06-06
如果說,此前的Scala語言是一種函數語言程式設計語言,那麼蘋果推出的Swift語言無疑是針對Scala提出的挑戰。

從語言特性比較上看,Swift語言是將函式作為第一等公民,同時支援型別和資料結構,當Java初學者還在疑惑物件是按值傳遞還是按引用傳遞時,Swift乾脆顯式的區分這兩點,型別Class是按引用傳遞,而資料結構是按值傳遞,這種清晰的分離反而使得OOP和FP兩種都變得更加輕鬆。見我之前的帖子:偽命題:Java傳遞的值還是引用?

當我們以函式程式設計為主時,因為函式程式設計追求的是貧血物件,也就是物件的方法和屬性是分離的,那麼在這種情況下,我們就不必委屈使用型別Class作為貧血物件實現,而是直接使用資料結構,演算法+資料結構=函式程式設計,多清晰簡單?OOP派的人也不再抨擊FP肢解他們的物件。

當我們以物件導向程式設計為主時,我們使用型別Class,OOP是講究充血模型,也就是物件方法和屬性是混合在一個Class中的。這樣OOP派的人也能保全了其物件導向的完整封裝性。

所以,從這點來看,雖然Swift和Scala都是FP和OOP的混合,但是Swift要比Scala做得到位,避免了兩者混亂。

Swift強於Scala的第二點可能是效能,因為Swift的作者曾經開發過LLVM,對於效能的重視大概是其基因使然,這點就無需多言。

當然,同樣作為函式語言,堅持不變性是語言的預設,可變性是特殊的原則,Swift使用let表示不變性,等同於Scala的val,Swift使用var表示可變。不過一般只有在OOP時,我們使用物件來封裝可變性,所以,我的大膽設想是,只有在型別class中才可以使用var,物件之外屬於函式程式設計的天下,函式程式設計是討厭可變狀態的,因此乾脆杜絕var使用,真正發揮函式程式設計無副作用的特點,這樣,語言變數預設預設都是不變性變數也就是常量,這樣的語言是不是更簡潔呢?

相關:

蘋果Swift語言簡要介紹

蘋果Swift語言簡明教程

[該貼被banq於2014-06-06 07:02修改過]

相關文章