和其它語言(比如 Java,C#)相比,Scala 只內(nèi)置了為數(shù)不多的幾種程序控制語句: if,while,for ,try match 以及函數(shù)調(diào)用,這是因?yàn)閺腟cala 誕生開始就包含了函數(shù)字面量,Scala 內(nèi)核沒有定義過多的控制結(jié)構(gòu),而是可以通過額外的庫來擴(kuò)展程序的控制結(jié)構(gòu)。
Scala的所有控制結(jié)構(gòu)都有返回結(jié)果,如果你使用過 Java或C#,就可能了解 Java 提供的三元運(yùn)算符 ?: ,它的基本功能和 if 一樣,當(dāng)可以返回結(jié)果。Scala 在此基礎(chǔ)上所有控制結(jié)構(gòu)(while,try,if,等)都可以返回結(jié)果。這樣做的一個(gè)好處是,可以簡化代碼,如果沒有這種特點(diǎn),程序員常常需要?jiǎng)?chuàng)建一個(gè)臨時(shí)變量用來保存結(jié)果。
總的來說,Scala 提供的基本程序控制結(jié)構(gòu),“麻雀雖小,五臟俱全”,雖然少,但足夠滿足其他指令式語言(如 Java,C++)所支持的程序控制功能,而且由于這些指令都有返回結(jié)果,可以使得代碼更為精簡。
Scala 語言的 if 的基本功能和其它語言沒有什么不同,它根據(jù)條件執(zhí)行兩個(gè)不同的分支,比如,使用 Java 風(fēng)格編寫下面 Scala 的 if 語句的一個(gè)例子:
var filename="default.txt"
if(!args.isEmpty)
filename =args(0)
上面代碼和使用 Java 實(shí)現(xiàn)沒有太多區(qū)別,看起來不怎么像 Scala 風(fēng)格,我們重新改寫一下,利用 if 可以返回結(jié)果這個(gè)特點(diǎn)。
val filename=
if(!args.isEmpty) args(0)
else "default.txt"
首先這種代碼比前段代碼短,更重要的是這段代碼使用 val 而無需使用 var 類型的變量。使用 val 為函數(shù)式編程風(fēng)格。