官术网_书友最值得收藏!

  • Scala編程(第5版)
  • (德)馬丁·奧德斯基等
  • 628字
  • 2022-05-06 15:51:48

7.1 if表達(dá)式

Scala的if表達(dá)式與很多其他語言中的if語句一樣,首先測(cè)試某個(gè)條件,然后根據(jù)是否滿足條件來執(zhí)行兩個(gè)不同代碼分支中的一個(gè)。下面給出了一個(gè)以指令式編程風(fēng)格編寫的常見例子:

這段代碼定義了一個(gè)變量filename并將其初始化為默認(rèn)值,然后用if表達(dá)式檢查是否有入?yún)魅脒@個(gè)程序。如果有,就用傳入的入?yún)⒏膶懽兞康闹担蝗绻麤]有,就保留變量的默認(rèn)值。

這段代碼可以寫得更精簡(jiǎn),因?yàn)镾cala的if表達(dá)式是一個(gè)能返回值的表達(dá)式(我們?cè)诘?章的第3步講到過)。示例7.1給出了不使用var但達(dá)到與上面的例子同樣效果的做法:

示例7.1 Scala的條件判定初始化常用寫法

這一次,if表達(dá)式有兩個(gè)分支。如果args不為空,則選取第一個(gè)元素args(0);否則選取默認(rèn)值。if表達(dá)式的返回值是被選取的值,這個(gè)值進(jìn)一步被用于初始化變量filename。這段代碼比前面給出的稍微短了一些,但真正的優(yōu)勢(shì)在于它使用的是val而不是var。使用val是函數(shù)式的編程風(fēng)格,就像Java的final變量那樣,有助于你編寫出更好的代碼。它也告訴讀這段代碼的人,這個(gè)變量一旦被初始化就不會(huì)改變,不必再掃描該變量整個(gè)作用域的代碼來弄清楚它會(huì)不會(huì)變。

使用val而不是var的另一個(gè)好處是對(duì)等式推理equational reasoning)的支持。引入的變量“等于”計(jì)算出它的值的表達(dá)式(假設(shè)這個(gè)表達(dá)式?jīng)]有副作用)。因此,在任何你打算寫變量名的地方,都可以直接用表達(dá)式來替換。比如,可以不用println(filename),而是寫成下面這樣:

這是你的選擇,兩種方式都是可行的。使用val可以讓你在代碼演進(jìn)過程中安全地執(zhí)行這種重構(gòu)。

只要有機(jī)會(huì),盡可能使用val,它會(huì)讓你的代碼更易讀且更易于重構(gòu)。

主站蜘蛛池模板: 贡嘎县| 元朗区| 万安县| 芦山县| 密云县| 全州县| 河间市| 汉中市| 揭东县| 普兰店市| 赫章县| 兴山县| 定南县| 玉溪市| 留坝县| 富川| 郎溪县| 华亭县| 卢龙县| 蓝山县| 施甸县| 红安县| 长治县| 团风县| 龙胜| 澄迈县| 龙州县| 三台县| 博白县| 内江市| 雅安市| 灌南县| 永靖县| 柞水县| 东源县| 眉山市| 上饶县| 泊头市| 南川市| 龙陵县| 常山县|