scala學習(2)-基本語法--for迴圈和if語句
上一篇部落格我對scala做了最基本的講述吧,主要是我就知道那麼多,哈哈,好啦,今天我們看看在任何語言中我們用的最多的兩種語句吧。一猜就中,for和if語句。
當然開始之前我們還是說一下在scala中的變數的定義怎麼來。
變數
在scala中如果要定義變數,我們通常有兩種方式,如下:
var count0 = 0
var name0 = ""
var num0 = 0.111
val count1 = 0
val name1 = ""
val num1 = 0.111
在scala中,var表示的是可變的變數,也就是我可以取做count0+=1的操作,但是count1 += 1就是不行的,編譯的時候就會報錯,切忌這一點,其他的話,scala他會自動識別資料型別,例如count0就是Int型別,name0就是字串型別,num0就是double型別的。
if語句
if
其實if語句和java的if語句幾乎沒什麼差別,要說差別的話,可能就是在scala裡邊一句話的結束是不需要“;”的,我能想到的也就是這個了。來看一下例子。
@Test
def testIf(): Unit = {
val flag = true
if (flag) {
println("flag::::" + flag)
}
//flag::::true
}
if…else
其實這也沒什麼好說的啦,直接上程式碼更直接
@Test
def testIfElse(): Unit = {
val flag = true
if (true) {
println("flag::::" + flag)
} else {
println("flag::::" + flag)
}
//flag::::true
}
if.. else if
@Test
def testIfElseAndIfElse(): Unit = {
val flag = true
if (true) {
println("flag::::" + flag)
} else if (false) {
println("flag::::" + false)
} else {
println("flag::::" + null)
}
}
在我們做判斷的時候最常用的就是這三種了,但是我們發現其實這三種和別的語言的判斷語句幾乎是沒什麼差別的,要說差別,可能就是沒有哪個”;”了吧。
迴圈語句
while語句
while的語句特點就是選判斷,然後做處理,例如
@Test
def testWhile(): Unit = {
var count = 0
var sum = 0
while (count < 10) {
sum += count
count += 1
}
count = 10
while (count < 0) {
sum += count
count -= 1
}
println(sum)
}
他們兩個的輸出結果都是45沒什麼差別。
當然有了while就必須有doWhile
dowhile語句
@Test
def testDoWhile(): Unit ={
var count = 0
var sum = 0
do{
count += 1
sum += count
}while(count <10)
println(sum)
}
當然一樣的是do…while的語句特點就是先處理在判斷,這點要注意,其他的地方暫無處理。哈哈。
for
@Test
def testFor(): Unit ={
val numList = List(1,2,3,4,5,6)
for (a <- numList){
print(a)
}
//result:::123456
}
List是scala的集合,這點我們以後會講,這裡主要講的是迴圈,看上去是不是超簡潔。不想java裡邊,
for(int i=0; i<numList.size();i++){
system.out.println(a);
}
這還是簡介了一部分,接下來還有更好玩的的。
for過濾器
@Test
def testForFilter(): Unit ={
val numList = List(1,2,3,4,5,6)
for (a <- numList
if a>2){
print(a)
}
//result:::3456
}
程式碼如上,我們如果需要做一些處理,就可以再()裡邊直接加判斷條件,多過濾條件可以再a>2後邊加分號繼續做篩選,這樣打印出來的資訊就是3456,大家可以想想如果這個語句放到java中會事什麼樣子。
for yield
當然我們也可以吧上邊篩選的結果存到一個集合裡邊,在java裡邊大家腦補一下程式碼吧,然後看看scala中如何做到的。
@Test
def testForYield(): Unit ={
val numList = List(1,2,3,4,5,6)
val refVal = for {a <- numList
if a>2;if a !=4
} yield a
for( a <- refVal){
println( "Value of a: " + a );
}
/*Value of a: 3
Value of a: 5
Value of a: 6*/
}
scala中有一個關鍵字yield,他會吧集合裡邊的資料存放到一個區域,然後我們就可以取出來。就像操作集合一樣。
foreach
@Test
def testForeach(): Unit ={
val numList = List(1,2,3,4,5,6)
var content = ""
numList.foreach(a=>print(a))
println()
numList.foreach({ a =>
content += a
})
println(content)
/*
123456
123456*/
}
其實他和for很像,需要注意的是在foreach中如果只有語句程式碼,例如print(a),則什麼也不需要做,但是如果需要在裡邊需要對變數做處理,則需要在each中加入大括號{},其他的一樣啦,大家看看,有沒有比java少一些程式碼。
小結
基本語句講完了,其實也沒什麼內容,只是感覺他比java少了很多的程式碼,所以就吧這些程式碼弄出來,其他的倒也沒什麼。下一篇我們來看看scala的函式吧。