1、Scala高級語言
Scala簡介
Scala是一門類Java的多范式語言,它整合了面向對象編程和函數式編程的最佳特性。具體來講 |
Scala運行于Java虛擬機(JVM)之上,井且兼容現有的Java程序,同樣具有跨平臺、可移植性好、方便的垃圾回收等特性 |
Scala是一門純粹的面向對象的語言 |
Scala也是一門函數式語言 |
Scala也是一門更適合大數據的語言 |
Scala對集合類型數據處理有非常好的支持 |
Spark的底層用Scala編寫 |
編程范式
編程范式是指計算機編程的基本風格或典范模式。常見的編程范式主要包括命令式編程和西數式編程。面向對象編程就屬于命令式編程,比如C++、Java等 |
命令式語言是植根于馮?諾依曼體系的,一個命令式程序就是一個馮?諾依曼機的指令序列,給機器提供一條又一條的命令序列讓其原封不動地執行 |
函數式編程,又稱泛函編程,它將計算機的計算視為數學上的函數計算 |
函數編程語言最重要的基礎是入演算,入演算對函數式編程特別是Lisp語言有著巨大的影響。典型的函數式語言包括Haskell、 Erlang和Lisp等 |
函數式編程與命令式編程 |
命令式編程涉及多線程之間的狀態共享,需要鎖機制實現并發控制 |
函數式編程不會在多個線程之間共享狀態,不需要用鎖機制,可以更好并行處理,充分利用多核CPU井行處理能力 |
1.1 Scala簡介
Scala是一門多范式(multi-paradigm)的編程語言,設計初衷是要集成面向對象編程和函數式編程的各種特性。 Scala運行在Java虛擬機上,并兼容現有的Java程序。 Scala源代碼被編譯成Java字節碼,所以它可以運行于JVM之上,并可以調用現有的Java類庫。 函數編程范式更適合用于Map/Reduce和大數據模型,著眼于函數本身,函數范式邏輯清晰、簡單,非常適合用于處理基于不變數據的批量處理工作。 像Spark,kafka等都是采用Scala開發的,所以學習好大數據,掌握scala是必要的。Flink是帶有scala的api支持。 官網:The Scala Programming Language
安裝方法:scala部署使用方法
1.5 Scala 編碼規范
1.5.1 文件名和編碼
# | 源文件名必須和它包含的頂層類名保持一致,包括大小寫,并以.scala作為后綴名。 |
# | 源文件編碼必須是 UTF-8 |
1.5.2 特殊字符
空格
除了換行符之外,ASCII空格(0x20)是唯一合法的空格字符。這意味著
-
所有在源代碼中(包括字符、字符串以及注釋中)出現的其他空格字符需要轉義,例如
Tab
用\t
表示。 -
縮進必須使用 4個空格 而不是
Tab
特殊轉義字符
對于有特殊轉義表示的字符 \b, \t, \n, \f, \r, \", \', \\
,禁止使用其它等價轉義方式。例如\012
或者\u00a
表示。
1.5.3 代碼書寫規范
列寬:每行不超過150個字符
縮進:4個空格,嚴禁使用Tab
括號的使用:
-
左花括號({)前不能換行,在其后換行。
-
在右花括號(})前要有換行。
-
如果右花括號是一句語句、一個方法、構造函數或非匿名類的結尾,其后需要換行。
new MyClass() { // 左花括號前不能換行,在其后換行@Overridedef method():Unit= {if (condition()) {try {do {something()} while (!stop()) // do-while中間的右花括號后} catch { // try-catch中間的右花括號后無需換行case e:Exception =>recover()} // try-catch結束,右花括號后需要換行} else { // if-else中間的右花括號后無需換行doSomethingElese()} // if-else結束,右花括號后需要換行}
其他:scala中的簡單表達式可以省略括號
// 推薦
def square(x: Int) = x * x
val y = if (x < 0) -x else x
if(cond1){// one line statement
}else{// one line statement
}
?
// 避免
if (x < 0) -x
elsex
空行的使用
在以下情況下增加空行:
-
在類的不同的成員間增加空行,包括:成員變量、構造函數、方法、內部類、靜態初始化塊、實例初始化塊等兩個成員變量聲明之間可以不加空行。空行通常用于對成員變量進行邏輯分組
-
方法體內,按需增加空行,以便從邏輯上對語句進行分組
-
禁止使用連續的空行
1.5.4 注釋風格
使用java風格的注釋,不用使用scala風格
/** 單行注釋 */
// 單行注釋
?
/*** java風格的多行注釋* 推薦使用*/
?
/** scala風格的注釋* 不推薦使用*/
1.5.5 命名規范
基本原則:駝峰命名,命名有業務含義。
val orderName = "name"