《深刻理解 Scala》第一章 — Scala 一種混合式編程語言

Scala 的預期目標是將面向對象、函數式編程和強大的類型系統結合起來,同時仍然要能寫出優雅、簡潔的代碼。 php

Scala 視圖將如下三組對立的思想融合到一種語言中: 算法

  • 函數式編程和麪向對象編程
  • 富有表達力的語法和靜態類型
  • 高級的語言特性同事保持與 Java 的高度集成

面向對象編程

面向對象編程是一種自頂向下的程序設計方法,將代碼以名詞(對象)作切割,每一個對象有某種形式的標識符(self/this)、行爲(方法)和狀態 (成員變量)。識別出名詞而且定義出它們的行爲後,再定義出名詞之間的交互。實現交互時,必須將這些交互放在其中一個對象中(而不能獨立存在)。現代面向 對象設計傾向於定義出」服務類「,將操做多個領域對象的方法集合放在裏面。這些服務類雖然也是對象,但一般不具備獨立狀態,也沒有與它們所操做的對象無關 的獨立行爲。 編程

函數式編程

函數式編程方法經過組合和應用函數來構造軟件。函數式編程一般傾向於將軟件分解爲其須要執行的行爲或操做,並且一般採用自底向上的方法。函數式編 程:對不可變性的強調有助於編寫併發程序,視圖將反作用推遲到儘量晚,提供了很是強大的對事物進行抽象和組合的能力。消除反作用使得對程序進行推理 (reasoning)變得容易。 併發

對比: 函數式編程

面向對象編程 函數式編程
對象的組合(名詞) 函數的組合(動詞)
封裝有狀態的交互 推遲反作用
迭代算法 遞歸算法
命令流 延遲計算
模式匹配

協變,Convariance,+T or ? extends T:類型能夠強制轉換爲子孫類;
逆變,Contravariance,-T or ? super T:類型能夠強制轉換爲祖先類;
不變,Invariance :類型徹底不能被強制轉換。 函數

函數式編程的精髓在於儘量地推遲反作用。 性能

Scala 作了如下幾個設計決策來提升代碼表達力: 優化

  • 把類型標註(type annotation)換到變量右邊;
  • 類型推斷;
  • 可擴展的語法;
  • 用戶自定義的隱式轉換。

操做符(operation notation)是 Scala 的一個能力,能夠把方法看成操做符。無參數的方法能夠用做後綴操做符,只有一個參數的方法能夠看成中綴操做符;方法名的最後一個字符若是是冒號 」:「,則方法的調用方向反轉。 this

在定義匿名函數時(又稱 lambda),Scala 提供了佔位符語法。能夠用 「_」 關鍵字做爲函數參數的佔位符。若是使用多個佔位符,每一個相應位置的佔位符對應於相應位置的參數。 spa

用好隱式轉換是操縱 Scala 類型系統的關鍵。隱式轉換的基礎應用場景是按需自動地把一種類型轉換爲另外一種,但它也能夠用於有限形式的編譯時元編程。要使用隱式轉換必須把它關聯到某個做用域,能夠經過伴生對象或明確導入來作關聯。

HotSpot

HotSpot 編譯器的優化技術:

  • 方法內聯(method inlining):HotSpot 可以判斷是否能在調用點直接把被調用的小方法的內容嵌入進去。
  • 棧替換(On Stack Replacement):指 HotSpot 可以判斷一個變量應該放在棧裏仍是堆裏。
  • 逃逸分析(Escape Analysis):HotSpot 分析各類東西是否逸出了特定做用於,這項技術主要用來在同步方法調用限定於某個做用域時減小鎖開銷。
  • 動態去優化(Dynamic De-optimization):是 HotSpot 的一個關鍵特性,它有能力判斷一個優化是否事實上沒有提高性能,而後取消該優化,改用其餘優化。


http://coderbee.net/index.php/scala/20150711/1262

相關文章
相關標籤/搜索