­

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 了,:)