When 表達式的參數可以聲明變數啦
- 2020 年 2 月 20 日
- 筆記
話說,之前我們如果有下面的情況:
val value = calcValue() when(value){ is Int -> println("Value is $value") else -> { println("Value is not Int.") } }
就是說我們在 when
的作用域內需要用到參數表達式的求值結果時,還需要在外部聲明一個參數,這樣一方面影響了程式碼書寫的流暢性,另一方面也污染了外部作用域。
很早就有人在論壇上說,是不是給 when
加一個 it
的支援?就像下面這樣,對於參數表達式,我們可以用 it
來指代,這就類似於沒有顯示指定參數名的 Lambda 表達式一樣:
when(calcValue()){ is Int -> println("Value is $it") else -> { println("Value is not Int.") } }
對於 it
已經感到害怕的 Kotlin 開發團隊,並沒有這樣做,但他們也給出了自己的答案,在 Kotlin 1.3 當中大家可以在參數處聲明變數:
when(val value = calcValue()){ is Int -> println("Value is $value") else -> { println("Value is not Int.") } }
好了,作用域污染的問題得到解決, value
只能在 when
作用域內使用,程式碼編寫流暢性嘛倒也還好。
1.3 應該用不了幾天就要發布了,上周的時候 rc-190 號稱是最後一個「提意見的機會」,看來估計 Kotlin SAM 的實現成本有點兒高被 Delay 了,:)