Scala教程-1 變量與函數的定義

Scala作爲面向對象和函數式編程語言,在大數據領域有着廣發的應用和優勢,本博客後續會推出一系列有關Scala的博文,旨在爲進入大數據行業的朋友們提供一些參考與學習,此篇博講述了該系列博客的第一章,變量與函數的定義,歡迎廣大朋友們一起學習、批評與指正。

1. 變量與函數的定義

1.1 scala與java版本兼容性

scala 2.10.X兼容jdk6, jdk7,不兼容jdk8;
scala 2.11.X兼容jdk8

1.2 val定義不可變的變量

1.2.1 不顯示指定變量的類型

scala>val name="robot"
name:String = robot

注意: val關鍵字類似於java中的final關鍵字;
​ Scala可以根據變量值的類型來推斷變量的類型。

1.2.2 顯示指定變量的類型

val name:String=”robot” 
name:String = robot

注意: 顯示指定變量的類型,後面對變量的賦值只能是指定變量類型或其子類型;

​ 對val修飾的變量不能進行修改,如果修改就會報錯;

​ 一般推薦使用val,因爲val變量佔用更少的內存。

1.2.3 同時對多個變量賦值

scala> val name1,name2,name3="spark"
name1: String = spark
name2: String = spark
name3: String = spark

1.3 var定義可變的變量

1.3.1 不顯示指定變量的類型

scala> var address="changsha"
address: String = changsha

1.3.2 顯示指定變量的類型

scala> var address:String="wuhan"
address: String = wuhan

注意: var修飾的變量的值是可以修改的

1.3.3 同時對多個變量賦值

scala> var (x,y)=(10,20)
x: Int = 10
y: Int = 20

1.4 函數定義

def functionName(parameterName:String ):String ={"my name is " + parameterName}

說明: def 類型關鍵字
functionName:函數名稱
parameterName:形參名稱
parameterName後面的String:形參類型
=前面的String:返回值類型
=:用來分隔函數聲明和函數體;告訴編譯器是否對函數的返回值進行類型推斷,如果省去=,則認爲函數沒有返回值(實質返回值爲Unit)。

scala> def myFunction()={"This is scala function"}
myFunction: ()String

scala> def myFunction(){"This is scala function"}
<console>:7: warning: a pure expression does nothing in statement position; you
may be omitting necessary parentheses
       def myFunction(){"This is scala function"}
                        ^
myFunction: ()Unit

1.5 main函數

Scala中的main函數需要存在於伴生類對象object中
注意:
(1) 函數體的最後一行的值就是整個函數的返回值;
(2) 類型的聲明是位於變量或者函數或者類後面的;

1.6 函數的參數、返回值和調用

函數有參數時,參數類型必須聲明;

返回值類型可以不聲明,遞歸函數必須聲明返回值類型;

在Scala中a.b(“xy”)形式的方法調用,可以寫成:a b “xy”;

1.7 匿名函數

“參數列表 => 函數體” 定義一個匿名函數

scala> (s:String)=>s.length
res0: String => Int = <function1>

scala> ((s:String)=>s.length)("lubin")
res1: Int = 5

經過上面的定義後,該語句結束後匿名函數就消失了,爲了能夠持久的利用該函數,可以將它賦值給變量或作爲參數傳遞給別的函數。

scala> val size=(s:String)=>s.length
size: String => Int = <function1>

scala> size("lubin")
res2: Int = 5

注意: 將函數賦值給變量,用變量來調用函數

scala> List("spark","hadoop","flink").map(size)
res3: List[Int] = List(5, 6, 5)

注意: 對於列表的每一項都使用同一函數文本

scala> List("spark","hadoop","flink").map((s:String)=>s.length)
res4: List[Int] = List(5, 6, 5)

注意: 對於列表的每一項都適用同一函數變量

1.8 可變參數的用法

scala> def variableParameter(s:String*)={s.foreach(x=>println(x))}
variableParameter: (s: String*)Unit

scala> variableParameter("lubin","spark","changsha","hadoop")
lubin
spark
changsha
hadoop

“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章