快學scala筆記第二章 結構及簡單函數

1 條件表達式



這裏需要注意x的類型通過定義,scala系統推斷爲Int類型不能進行修改

scala中有Any類型


scala中的Unit類型(像java中void類型)


scala語句塊,整個語句塊中最後一個表達式返回爲變量賦值


2 輸入和輸出

輸出函數:

print, println, printf

輸入函數:

var line=readLine()

var x=readInt()

3 循環

while循環

for循環


遍歷字符串循環:
val s="hello"
for(i<-s)println(i)
for(j<-0 to s.length-1)println(s(j))

注意:

scala中沒有break和continue語句

可以導入Breaks中的break

import scala.util.control.Breaks._
for (i<-1 until 3){
  for(j<-1 until 5){
    if(i%3==0){
      break
    }
      println(i)
  }
}

4 高級for循環和推導

for循環中提供多個生成器,使用分號分割

for(i<-1 to 3;j<-4 to 5)printf("i:%d,j:%d\n",i,j)

每次循環帶有守衛,使用if語句

for(i<-1 to 5;j<-2 to 4 if i!=j)printf("i:%d,j:%d\n",i,j)

在循環表達式中可以引入多個變量,並在循環中使用該變量

for(i<-1 to 5;x=i+1;j<-x to 4)printf("i:%d,j:%d\n",i,j)

for推導式:

循環體以yield開始,循環構造出一個集合,yield後面的表達式生成了集合中的值

val x=for(i<-1 to 5) yield i

    print(x)//Vector(1, 2, 3, 4, 5)

如果yield中使用for的第一個表達式的類型是字符串,則最終返回字符串本身

val y=for(x<-"ok"; i<-1 to 3) yield (x+i).toChar

    print(y)//pqrlmn

但是yield中使用for的第二個表達式是字符串類型,則返回集合

val x=for(i<-1 to 3;j<-"ok")yield (j+i).toChar

    println(x)//Vector(p, l, q, m, r, n)


5 函數

scala中可以定義函數,其中參數類型必須給出,如果函數不是遞歸函數,無需給出返回類型;

函數通過=符號後的表達式 自動推導返回類型

def one(x:Int,y:Int)=x+y

def func(x:Int):Int=if(x==1||x==0) 1 else x*func(x-1)


5.1 默認參數和帶名參數

函數參數定義中可以使用默認值

def func2(x:String="<",y:Int=8)=x+y


調用

func2(y=66)

func2()

func2("<<")

但是

func2(6)這個調用違反參數的聲明順序

5.2 變長參數

在參數聲明後添加*,表示可變長參數;函數得到一個seq類型的參數

x.tail得到除了第一個元素外的其他所有元素

def sum(x:Int*)={

println(x.tail)

    var s=0;for(i<-x)s+=i;s      

  }

調用

val y=sum(1,2,3)

_*將1 to 5當做序列處理

val y2=sum(1 to 5:_*)

6 過程

當函數體前沒有=符號,返回值類型自動變成Unit, 這種成爲過程

def func(){

printf("ok")

 }

def func():Unit={

printf("ok")

 }


7 異常

使用throw拋出異常

def func(x:Int)={

   if(x>0)

     scala.math.sqrt(x)

    else

throw new IllegalArgumentException("參數不能負數")

 }

調用時使用try..catch處理異常

使用_代表異常變量;定義異常變量ex可以打印異常信息

try{

      func(-9)

    }catch{

      case _:IOException=>print(-9)

      case ex:IllegalArgumentException=>ex.printStackTrace()

    }finally{

      print("over")

    }











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