3.3. 條件表達(dá)式表達(dá)式:一個具有執(zhí)行結(jié)果的代碼塊。結(jié)果是具體的值或者() 表達(dá)式的思考方式:以表達(dá)式為中心的編程思想 1.表達(dá)式和語句的區(qū)別:表達(dá)式有返回值,語句被執(zhí)行。表達(dá)式一般是一個語句塊,執(zhí)行后,返回一個值 2.不使用return語句,最后一個表達(dá)式即返回值 if/else表達(dá)式有值,這個值就是跟在if或者else之后的表達(dá)式的值 object ConditionDemo { def main(args: Array[String]){ var x = 1 //將if/else表達(dá)式值賦給變量y val y = if (x > 0 ) 1 else -1 println(y)
//支持混合型表達(dá)式 //返回類型是Any val z = if(x>0) "success" else -1 println(z)
//如果缺失else,相當(dāng)于if(x>2) 1 else () //返回類型是AnyVal //如果進(jìn)行類型判斷和轉(zhuǎn)換,可以使用: //var b = if(m.isInstanceOf[Int]) m.asInstanceOf[Int] else 0 val m = if(x>2) 1 println(m)
//在scala中,每個表達(dá)式都有值,scala中有個unit類,寫作(),相當(dāng)于Java中的 void val n = if(x>2) 1 else () println(n)
//if 嵌套 val k= if(x<0) 0 else if (x>=1) 1 else -1 println(k)
} 執(zhí)行結(jié)果: Scala的的條件表達(dá)式比較簡潔,例如: 注意:1,每個表達(dá)式都有一個類型 2,條件表達(dá)式有值 3,混合型表達(dá)式,結(jié)果是Any或者AnyVal 4,scala沒有switch語句 3.4. 塊表達(dá)式object BlockExpressionDemo { def main(args: Array[String]){
var x = 0
//在scala中,{}中可以包含一系列表達(dá)式,塊中最后一個表達(dá)式的值就是塊的值 val res = { if (x < 0) { -1 } else if (x >= 1) { 1 } else { "error" } } println(res)
val x0 = 1 val y0 = 1 val x1 = 2 val y1 = 2 val distance = { val dx = x1 - x0 val dy = y1 - y0 Math.sqrt(dx*dx+dy*dy) } println(distance)
//塊語句,最后一句是賦值語句,值是unit類型的
var res2 = { val dx = x1 - x0 val dy = y1 - y0 val res = Math.sqrt(dx*dx+dy*dy) } println(res2) }
} 執(zhí)行結(jié)果: 注意: 1,塊表達(dá)式的值是最后一個表達(dá)式的值 2,賦值語句的值是unit類型的, 3.5. 循環(huán)在scala中有for循環(huán)和while循環(huán),用for循環(huán)比較多 for循環(huán)語法結(jié)構(gòu):for (i <- 表達(dá)式/數(shù)組/集合) while (條件語句){表達(dá)式} do{ 表達(dá)式}while() object ForDemo def main(args: Array[String]){ //每次循環(huán)將區(qū)間的一個值賦給i for( i <- 1 to 10) println(i)
//for i <-數(shù)組 val arr = Array("a", "b", "c") for( i <- arr) println(i)
val s = "hello" for(i <- 0 until s.length){ println(s(i)) } // 或者 // for(c <- s)println(c) // 或者 // for(i <- 0 until s.length){ // println(s.charAt(i)) //使用了隱式轉(zhuǎn)換,把字符串變成一個ArrayCharSequence // } //高級for循環(huán) for(i <- 1 to 3 ; j<- 1 to 3 if i != j) print((10*i + j) + "") println()
//for推導(dǎo)式,如果for循環(huán)的循環(huán)體以yeild開始,則該循環(huán)會構(gòu)建出一個集合或者數(shù)組,每次迭代生成其中的一個值。 val v= for ( i <- 1 to 10 )yield i*10 println (v) //也可以借助函數(shù)由初始數(shù)組生成一個新的數(shù)組 val arr1 = Array(1,2,3,4,5,6,7,8,9) val arr2 = arr.map(_*10) val arr3 = arr.filter(_%2==0) } }
|