Scala菜鳥進(jìn)階之路之控制結(jié)構(gòu)和函數(shù)(二)

語句終止

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ī)制。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容