從OOP和FP看蘋果Swift語言與Scala比較
如果說,此前的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語言是將函式作為第一等公民,同時支援型別和資料結構,當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使用,真正發揮函式程式設計無副作用的特點,這樣,語言變數預設預設都是不變性變數也就是常量,這樣的語言是不是更簡潔呢?
相關:
[該貼被banq於2014-06-06 07:02修改過]
相關文章
- OC,swift,javascript,Dart語言比較SwiftJavaScriptDart
- 現代語言Go、Rust、Swift和Dart的比較GoRustSwiftDart
- OOP和FP錯在哪裡?OOP
- 從Swift語言看ORM的定位錯誤SwiftORM
- 幽默:程式語言與遊戲比較遊戲
- Flutter與Swift比較 - evroneFlutterSwiftVR
- Swift和Objective C比較SwiftObject
- 幼談蘋果新開發語言:Swift和蘋果的用心蘋果Swift
- python開發-與其他語言的比較Python
- Ruby程式語言與Ruby之間的比較
- 與其他語言的比較——瞭解ASP、PHP和JSP (轉)PHPJS
- 流行語言的比較 (轉)
- ABAP, Java和JavaScript三種語言的比較JavaScript
- k語言和q語言的比較
- 從各方面比較現在多種語言 (轉)
- 蘋果的新程式語言 Swift 簡介蘋果Swift
- Go語言的Web框架比較GoWeb框架
- 跨語言通訊方案比較
- Scala與Haskell的嚴謹優雅性比較Haskell
- 從原理分析Swift的switch怎麼比較物件Swift物件
- Swift3.0語言教程比較、判斷字串Swift字串
- 不要進行無謂的OOP與FP爭論 - Mathias VerraesOOP
- Swift 語言的字串與字元Swift字串字元
- 蘋果新的程式語言 Swift 語言進階(十二)--選項鍊蘋果Swift
- 一個程式語言比較網站網站
- 多語言永續性與資料儲存比較綜述
- Java,Pyhon,Scala比較(一)map,reduceJava
- Java,Python,Scala比較(三)wordcountJavaPython
- 有趣的 Scala 語言: 簡潔的 Scala 語法
- 蘋果Swift程式語言入門教程【中文版】蘋果Swift
- C語言的比較庫函式--qsortC語言函式
- 11大類程式語言功能比較表
- 從五大語言看函式和lambda表示式函式
- 從《矽谷傳奇》看微軟和蘋果微軟蘋果
- 從語言學角度看詞嵌入模型模型
- 從商業利益看 Go 程式語言Go
- 蘋果要用 Swift 語言顛覆傳統程式設計蘋果Swift程式設計
- 蘋果推出新部落格 宣傳全新程式語言Swift蘋果Swift