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")
}