1.if表達式java
if表達式的定義:在Scala中,if表達式是有值的,就是if或者else中最後一行語句返回的值。
例如,val age = 30; if (age > 18) 1 else 0
能夠將if表達式賦予一個變量,例如,val isAdult = if (age > 18) 1 else 0
另一種寫法,var isAdult = -1; if(age > 18) isAdult = 1 else isAdult = 0,可是一般使用上一種寫法
if表達式的類型推斷:因爲if表達式是有值的,而if和else子句的值類型可能不一樣,此時if表達式的值是什麼類型呢?Scala會自動進行推斷,取兩個類型的公共父類型。
例如,if(age > 18) 1 else 0,表達式的類型是Int,由於1和0都是Int
例如,if(age > 18) "adult" else 0,此時if和else的值分別是String和Int,則表達式的值是Any,Any是String和Int的公共父類型
若是if後面沒有跟else,則默認else的值是Unit,也用()表示,相似於java中的void或者null。例如,val age = 12; if(age > 18) "adult"。此時就至關於if(age > 18) "adult" else ()。
將if語句放在多行中:默認狀況下,REPL只能解釋一行語句,可是if表達式一般須要放在多行。
可使用{}的方式,好比如下方式,或者使用:paste和ctrl+D的方式。
if(age > 18) { "adult"
} else if(age > 12) "teenager" else "children"函數
2.語句終結符和塊表達式spa
默認狀況下,scala不須要語句終結符,默認將每一行做爲一個語句scala
一行放多條語句:若是一行要放多條語句,則必須使用語句終結符
例如,使用分號做爲語句終結符,var a, b, c = 0; if(a < 10) { b = b + 1; c = c + 1 }
一般來講,對於多行語句,仍是會使用花括號的方式
if(a < 10) {
b = b + 1
c = c + 1
}字符串
塊表達式:塊表達式,指的就是{}中的值,其中能夠包含多條語句,最後一個語句的值就是塊表達式的返回值。
例如,var d = if(a < 10) { b = b + 1; c + 1 }it
3.輸入和輸出for循環
print和println:print打印時不會加換行符,而println打印時會加一個換行符。ast
例如,print("Hello World"); println("Hello World")
printf:printf能夠用於進行格式化
例如,printf("Hi, my name is %s, I'm %d years old.\n", "Leo", 30)
readLine: readLine容許咱們從控制檯讀取用戶輸入的數據,相似於java中的System.in和Scanner的做用。import
4.循環遍歷變量
while do循環:Scala有while do循環,基本語義與Java相同。
var n = 10
while(n > 0) {
println(n)
n -= 1
}
Scala沒有for循環,只能使用while替代for循環,或者使用簡易版的for語句
簡易版for語句:var n = 10; for(i <- 1 to n) println(i)
或者使用until,表式不達到上限:for(i <- 1 until n) println(i)
也能夠對字符串進行遍歷,相似於java的加強for循環,for(c <- "Hello World") print(c)
跳出循環語句
scala沒有提供相似於java的break語句。
可是可使用boolean類型變量、return或者Breaks的break函數來替代使用。
import scala.util.control.Breaks._
breakable {
var n = 10
for(c <- "Hello World") {
if(n == 5) break;
print(c)
n -= 1
}
}
}
5.高級for循環
多重for循環:九九乘法表
for(i <- 1 to 9; j <- 1 to 9) {
if(j == 9) {
println(i * j)
} else {
print(i * j + " ")
}
}
if做爲for守衛:取偶數
for(i <- 1 to 100 if i % 2 == 0) println(i)
for推導式:構造集合 for(i <- 1 to 10) yield i