- 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)。
- 程序設(shè)計(jì)與實(shí)踐(VB.NET)
- 深入淺出Spring Boot 2.x
- Designing Hyper-V Solutions
- Mastering C# Concurrency
- 深入淺出Android Jetpack
- Hands-On C++ Game Animation Programming
- Building a Recommendation Engine with Scala
- Troubleshooting PostgreSQL
- Tableau 10 Bootcamp
- SSM開發(fā)實(shí)戰(zhàn)教程(Spring+Spring MVC+MyBatis)
- Bootstrap for Rails
- 代碼閱讀
- Web程序設(shè)計(jì)與架構(gòu)
- Mastering Puppet(Second Edition)
- 片上系統(tǒng)設(shè)計(jì)思想與源代碼分析