語句終止
1、在Scala中行尾位置不需要寫分號(hào),只要能夠從上下文明確地判斷出這里是語句的終止即可。
2、在寫比較長的Scala語句時(shí),需要分兩行來寫,就要確保第一行以一個(gè)不能用作語句結(jié)尾的符號(hào)結(jié)尾。通常來說一個(gè)比較好的選擇是操作符:
舉個(gè)栗子:
s = s0 + (v - v0) * t +
0.5 * (a - a0) * t * t
**在實(shí)際編碼中,長表達(dá)式通常涉及函數(shù)或方法調(diào)用,如此一來你并不需要過分擔(dān)心----在左括號(hào)之后,編譯器會(huì)一直等到與之匹配的右括號(hào)才會(huì)去推斷某處是否為語句結(jié)尾。
舉個(gè)栗子:
if (n > 0) {
r = r * n
n -= 1
}
塊表達(dá)式和賦值
1、在Scala中,{}塊包含一系列表達(dá)式,其結(jié)果也是一個(gè)表達(dá)式。塊最后一個(gè)表達(dá)式的值就是塊的值。
舉個(gè)栗子:
這種特性對(duì)于某種對(duì)某個(gè) val 的初始化需要分多步完成的情況很有用,
val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy)}
其中,dx,dy僅作為計(jì)算的中間值,很干凈地多對(duì)程序其他部分而言不可見。
2、在Scala中,賦值動(dòng)作本身是沒有值的,更嚴(yán)格地說他們的值是Unit類型,該類型只有一個(gè)值,寫做(),因此將賦值語句串接起來是沒有意義的。
舉個(gè)栗子:
一個(gè)賦值語句結(jié)束的塊,? {r = r * n; n -= 1}
值是Unit類型的
x = y = 1 //別這樣做,是沒有意義的
輸入輸出
1、輸出
print 與 println
舉個(gè)栗子:
print("Answer:")? 與? println("Answer:" + 42)? 效果相同
println(42)
printf 格式化輸出
舉個(gè)栗子:
printf("Hello, %s! You are %d years old.\n","Fred", 42)
2、輸入
readInt、readDouble、readByte、readShort、readLong、readFloat、readBoolean、readChar等
與上面這些方法不同的是。readLine帶一個(gè)參數(shù)作為提示字符串:
val name = readLine("Your name: ")
print("Your age: ")
val age = readInt()
printf("Hello, %s! You are %d years old.\n","Fred", 42)
循環(huán)
1、Scala擁有與Java和C++相同的while和do循環(huán)
while (n > 0) {
r = r * n
n -= 1
}
2、Scala中沒有與java中對(duì)應(yīng)的for循環(huán)類型,但是可以使用如下for語句:
for (i <- 表達(dá)式)? i 遍歷右邊表達(dá)式的值
** 在for循環(huán)的變量之前并沒有val或var的指定。該變量的類型是集合的元素類型,循環(huán)變量的作用域一直持續(xù)到循環(huán)結(jié)束。
3、在遍歷字符串或者數(shù)組的時(shí)候,until方法返回一個(gè)并不包含上限的區(qū)間。
val s = "Hello"
var sum = 0
for (i <- 0 until s.length) // i的最后一個(gè)取值是s.length-1
sum? += s(i)
在本例中,事實(shí)上我們并不需要使用下標(biāo)。你可以直接遍歷對(duì)應(yīng)的字符序列:
var sum = 0
for (ch <- "Hello") sum += ch
4、Scala中并沒有提供break或continue語句來退出循環(huán)。如果需要break時(shí),有以下三種方案來解決:
(1)使用Boolean型的控制變量
(2)使用嵌套函數(shù)————————你可以從函數(shù)當(dāng)中return。
(3)使用Breaks對(duì)象中break方法
import scala.util.control.Breaks._
breakable {
for(){
if () break;//退出breakable塊
.......
}
}
在這里,控制權(quán)的轉(zhuǎn)移是通過拋出和捕獲異常完成的,因此,如果時(shí)間很重要的話,你應(yīng)該盡量避免使用這套機(jī)制。