Scala編程快速入門系列(一)

来源:https://www.cnblogs.com/yangp/archive/2018/03/16/8575705.html
-Advertisement-
Play Games

本文較為詳細地介紹了Scala的理論,並結合相應的代碼進行解讀與實踐。文章內容主要包含Scala的簡介,數據類型,函數(函數定義、匿名函數、嵌套函數、迴圈語句等),集合(List、Tuple、Map),伴生對象,trait,Actor,隱式轉換,JDBC等。 ...


目    錄

一、Scala概述

二、Scala數據類型

三、Scala函數

四、Scala集合

五、Scala伴生對象

六、Scala trait

七、Actor

八、隱式轉換與隱式參數

九、Scala JDBC

由於整理的篇幅較長,所以文章計劃分三次發佈。

一、Scala概述

1. Scala簡介

  Scala是一種針對JVM將函數和麵向對象技術組合在一起的編程語言。所以Scala必須要有JVM才能運行,和Python一樣,Scala也是可以面向對象和麵向函數的。Scala編程語言近來抓住了很多開發者的眼球。它看起來像是一種純粹的面向對象編程語言,而又無縫地結合了命令式和函數式的編程風格。Scala的名稱表明,它還是一種高度可伸縮的語言。Scala的設計始終貫穿著一個理念:創造一種更好地支持組件的語言。Scala融匯了許多前所未有的特性,而同時又運行於JVM之上。隨著開發者對Scala的興趣日增,以及越來越多的工具支持,無疑Scala語言將成為你手上一件必不可少的工具。Spark最最源生支持的語言是Scala。Spark主要支持java、Scala、Python和R。Scala的底層協議是akka(非同步消息傳遞)。

2. Scala安裝與開發工具

  Scala版本使用Scala-2.10.x

  JDK使用jdk-1.8。

  開發工具使用Intellij IDEA-2017.3.5

二、Scala數據類型

1. 數據類型

 

  scala擁有和java一樣的數據類型,和java的數據類型的記憶體佈局完全一致,精度也完全一致。其中比較特殊的類型有Unit,表示沒有返回值;Nothing表示沒有值,是所有類型的子類型,創建一個類就一定有一個子類是Nothing;Any是所有類型的超類;AnyRef是所有引用類型的超類;註意最大的類是Object。

  上表中列出的數據類型都是對象,也就是說scala沒有java中的原生類型。在scala是可以對數字等基礎類型調用方法的。例如數字1可以調方法,使用1.方法名。

 

 

  如上兩圖所示,可見所有類型的基類與Any。Any之後分為兩個AnyVal與AnyRef。其中AnyVal是所有數值類型的父類型,AnyRef是所有引用類型的父類型。

  與其他語言稍微有點不同的是,Scala還定義了底類型。其中Null類型是所有引用類型的底類型,及所有AnyRef的類型的空值都是Null;而Nothing是所有類型的底類型,對應Any類型;Null與Nothing都表示空。

  在基礎類型中只有String是繼承自AnyRef的,與Java,Scala中的String也是記憶體不可變對象,這就意味著,所有的字元串操作都會產生新的字元串。其他的基礎類型如Int等都是Scala包裝的類型,例如Int類型對應的是Scala.Int只是Scala包會被每個源文件自動引用。

  標準類庫中的Option類型用樣例類來表示拿著可能存在、也可能不存在的值。樣例子類Some包裝了某個值,例如:Some(“Fred”);而樣例對象None表示沒有值;這比使用空字元串的意圖更加清晰,比使用null來表示缺少某值的做法更加安全(避免了空指針異常)。

2. 聲明與定義

  欄位/變數的定義Scala中使用var/val 變數/不變數名稱: 類型的方式進行定義,例如

var index1 : Int= 1
val index2 : Int= 1

  在Scala中聲明變數也可以不聲明變數的類型。 

  • 常量的聲明 val

  使用val來聲明一個常量。與java一樣,常量一次賦值不可修改。

val name : String="Yang"//這是完整的寫法,可以省略類型,如下所示:
val name="Yang"
name="Yang2"//會報錯reassignment to val
  • 變數的聲明 var
var name : String = "Yang" //這是完整的寫法,可以省略類型,如下所示:
//var name = "Yang" //變數或常量聲明時,類型可以省略,Scala內部機制會推斷。
name = "Yang2"//變數的值可以修改
  • 函數的聲明 def

  使用def關鍵字來聲明函數。例如:

object HelloScala {
  def main(args: Array[String]): Unit = {
    println(f)
  }
  val a=1
  var b=2
  def f=a*b
}