1. 程式人生 > >scala學習(2)-基本語法--for迴圈和if語句

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的函式吧。