帶你快速掌握Scala操作———(2)

繼續上一篇《Scala基礎操作(1)———Scala解釋器,聲明變量,字符串》給大家接着分享下面的操作!!!!!!

1、數據類型與操作符

scala中的類型以及操作符絕大多數和Java一樣
數據類型
基礎類型 類型說明
Byte 8位帶符號整數
Short 16位帶符號整數
Int 32位帶符號整數

在這裏插入圖片描述

注意下 scala類型與Java的區別

1.	scala中所有的類型都使用大寫字母開頭
2.	整形使用Int而不是Integer
3.	scala中定義變量可以不寫類型,讓scala編譯器自動推斷
運算符

在這裏插入圖片描述

	scala中沒有,++--運算符
	與Java不一樣,在scala中,可以直接使用==!=進行比較,它們與equals方法表示一致。而比較兩個對象的引用值,使用eq

示例

有一個字符串"abc",再創建第二個字符串,值爲:在第一個字符串後拼接一個空字符串。
然後使用比較這兩個字符串是否相等、再查看它們的引用值是否相等。

參考代碼

val str1 = "abc"
val str2 = str1 + ""
str1 == str2
str1.eq(str2)
scala類型層次結構

在這裏插入圖片描述
在這裏插入圖片描述

nothing

def main(args: Array[String]): Unit = {
    val c = m3(1,0)
}

def m3(x:Int, y:Int):Int = {
    if(y == 0) throw new Exception("這是一個異常")
    x / y
}

問題
以下代碼是否有問題?

val b:Int = null

scala會解釋報錯:

Null類型並不能轉換爲Int類型,說明Null類型並不是Int類型的子類	

2、條件表達式

條件表達式就是if表達式。scala條件表達式的語法和Java一樣。
有返回值的if

參考代碼

scala> val sex = "male"
sex: String = male

scala> val result = if(sex == "male") 1 else 0
result: Int = 1
與Java不一樣的是,
	在scala中,條件表達式也是有返回值的
	在scala中,沒有三元表達式,可以使用if表達式替代三元表達式
塊表達式
	scala中,使用{}表示一個塊表達式
	和if表達式一樣,塊表達式也是有值的
	值就是最後一個表達式的值
問題
請問以下代碼,變量a的值是什麼?
scala> val a = {
    | println("1 + 1")
    | 1 + 1
    | }

3、循環

在scala中,可以使用for和while,但一般推薦使用for表達式,因爲for表達式語法更簡潔
for表達式

語法

for(i <- 表達式/數組/集合) {
    // 表達式
}

簡單循環

使用for表達式打印1-10的數字
參考代碼1

scala> val nums = 1.to(10)                                                              
nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)                                                                                  
scala> for(i <- nums) println(i)      

參考代碼2
// 中綴調用法

scala> for(i <- 1 to 10) println(i)

嵌套循環

使用for表達式,打印以下字符
\*****
\*****
\*****
參考代碼

for(i <- 1 to 3; j <- 1 to 5) {print("*");if(j == 5) println("")}

守衛

for表達式中,可以添加if判斷語句,這個if判斷就稱之爲守衛。我們可以使用守衛讓for表達式更簡潔。

語法

for(i <- 表達式/數組/集合 if 表達式) {
    // 表達式
}

示例

使用for表達式打印1-10之間能夠整除3的數字
參考代碼
// 添加守衛,打印能夠整除3的數字
for(i <- 1 to 10 if i % 3 == 0) println(i)
for推導式
在for循環體中,可以使用yield表達式構建出一個集合,我們把使用yield的for表達式稱之爲推導式

示例

生成一個10、20、30...100的集合

參考代碼

// for推導式:for表達式中以yield開始,該for表達式會構建出一個集合
val v = for(i <- 1 to 10) yield i * 10
while循環
scala中while循環和Java中是一致的

示例

打印1-10的數字

參考代碼

scala> var i = 1
i: Int = 1

scala> while(i <= 10) {
     | println(i)
     | i = i+1
     | }
break和continue
	scala中,沒有break/continue關鍵字
	如果一定要使用break/continue,就需要使用scala.util.control包的Break類的breable和break方法。

實現break

用法

 導入Breaks包import scala.util.control.Breaks._

	使用breakable將for表達式包起來
	for表達式中需要退出循環的地方,添加break()方法調用

示例

使用for表達式打印1-100的數字,如果數字到達50,退出for表達式
參考代碼
// 導入scala.util.control包下的Break
import scala.util.control.Breaks._
breakable{
    for(i <- 1 to 100) {
        if(i >= 50) break()
        else println(i)
    }
}

實現continue

用法

continue的實現與break類似,但有一點不同:
實現continue是用breakable{}將for表達式的循環體包含起來

示例

打印1-100的數字,使用for表達式來遍歷,如果數字能整除10,不打印
// 導入scala.util.control包下的Break    
import scala.util.control.Breaks._
for(i <- 1 to 100 ) {
   breakable{
       if(i % 10 == 0) break()
       else println(i)
  }
}

4、方法

一個類可以有自己的方法,scala中的方法和Java方法類似。但scala與Java定義方法的語法是不一樣的。
定義方法

語法

def methodName (參數名:參數類型, 參數名:參數類型) : [return type] = {
   // 方法體:一系列的代碼
}
	參數列表的參數類型不能省略
	返回值類型可以省略,由scala編譯器自動推斷
	返回值可以不寫return,默認就是{}塊表達式的值

示例

1.	定義一個方法,實現兩個整形數值相加,返回相加後的結果
2.	調用該方法

參考代碼

scala> def add(a:Int, b:Int) = a + b
m1: (x: Int, y: Int)Int

scala> add(1,2)
res10: Int = 3
返回值類型推斷
scala定義方法可以省略返回值,由scala自動推斷返回值類型。
定義遞歸方法,不能省略返回值類型

示例

定義遞歸方法(求階乘)
10 * 9 * 8 * 7 * 6 * ... * 1

參考代碼

scala> def m2(x:Int) = {
     | if(x<=1) 1
     | else m2(x-1) * x
     | }
<console>:13: error: recursive method m2 needs result type
       else m2(x-1) * x
方法參數

scala中的方法參數,使用比較靈活。它支持以下幾種類型的參數:

•	默認參數
•	帶名參數
•	變長參數

默認參數

在定義方法時可以給參數定義一個默認值。

參考代碼

// x,y帶有默認值爲0 
def add(x:Int = 0, y:Int = 0) = x + y
add()

帶名參數

在調用方法時,可以指定參數的名稱來進行調用。

參考代碼

def add(x:Int = 0, y:Int = 0) = x + y
add(x=1)

變長參數

如果方法的參數是不固定的,可以定義一個方法的參數是變長參數。

語法格式:

def 方法名(參數名:參數類型*):返回值類型 = {
    方法體
}
在參數類型後面加一個*號,表示參數可以是0個或者多個

參考代碼

scala> def add(num:Int*) = num.sum
add: (num: Int*)Int

scala> add(1,2,3,4,5)
res1: Int = 15
方法調用方式

在scala中,有以下幾種方法調用方式,

•	後綴調用法
•	中綴調用法
•	花括號調用法
•	無括號調用法

在後續編寫spark、flink程序時,我們會使用到這些方法調用方式。

後綴調用法

這種方法與Java沒有區別。

語法

對象名.方法名(參數)

示例

使用後綴法Math.abs求絕對值

參考代碼

scala> Math.abs(-1)
res3: Int = 1

中綴調用法

語法 注意空格

對象名 方法名 參數
例如:1 to 10
如果有多個參數,使用括號括起來

示例

使用中綴法Math.abs求絕對值
scala> Math abs -1
res4: Int = 1

操作符即方法

scala中,+ - * / %等操作符都是方法,操作符是一個方法名字是符號的方法。

花括號調用法

語法

Math.abs{ 
    // 表達式1
    // 表達式2
}
方法只有一個參數,才能使用花括號調用法

示例

使用花括號調用法Math.abs求絕對值
參考代碼
scala> Math.abs{-10}
res13: Int = 10

無括號調用法

如果方法沒有參數,可以省略方法名後面的括號

示例

	定義一個無參數的方法,打印"hello"
	使用無括號調用法調用該方法

參考代碼

def m3()=println("hello")
m3()

喜歡點個關注吧 後續還會繼續分享Scala操作的!!!11

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