19.0331

if/when 文/式

とは、普通、「値を返す」。
とは、普通、「値を返さず、その中で、処理するもの」。
なのですが、どうも、言語によって、そんなに、単純に割り切れるものではなさそうです。

Kotlin の場合も、if文 や、when文 に、「式」 を、含めたり、
さらには、「式のみ」 としても、使えるようです。


1. 文 として使う
百聞は一見に如かず(見た方が早い)ということで、
例文 を見てみましょう。

「文として使う」 と言われても、普通の、if文 と when文 としか、
最初は、思えないと思えます。
でも、「式」 と比べれば、最初に言ったことの意味が分かると思います。

その前に、少し復習をしましょう。

if 文 の 引数
  if(引数) { // コード }
で、「引数」 の部分のことです。
  if文 の、引数は、必ず、Boolean型(true/false)
ということを、まず、確認しておいてください。
あとは、特に、難しいところは、ないと思います。

when 文 の 引数
実は、今例文を書いていて、改めて、気づいたというか、
「意識すべきとして気づいた」 のですが、
when文 の場合、引数は、なんでも、OKのようです。

when:柔軟なスコーピング
どういうことかというと、改めて言わなくともな、感じですが、
  場合場合によって、スコーピングの方法が、異なる
ということです。
  ==、Range型での使い方、else
それぞれに応じて、柔軟に対応してくれていますね。
この例文では、分かりませんが、「9. when ・ スコーピング
のところでは、IntRange型 での、スコーピングでは、
  whenの引数 in 範囲(range/はんい)
のように、対応してくれています。
また、
  else は、if/else文 での、else の使い方
と同様に、対応してくれます。


2. 式 として使う
これも、まず、例文を、見てみましょう。
このやり方は、初めての使い方です。
どこが初めてなのかというと、if文/when文 ではなく、if/whens として、
使っていることです。
if式 も、when式 も、値 を、返しています
例文を、見ていただければわかるように、変数lastValue と、whichValue に、
値 を返し、println()関数 で、コンソールに出力しています。

このように、Kotlin では、if/when として、
使うことが出来ます。

これの何がいいかというと、逆にこのやり方でないと、
println()関数 を、条件分岐ごとに、書く必要が出てくる、、
ということです。
条件分岐が、多いほど、このやり方は、楽なやり方ですね。
少しこのコードを、イメージ化してみます。
 val x: タイプ = if/when(条件){ ある適切な値 }

ただ、ここで、気を付ける点があります。
それは、上の、if式 を使たコード を、見てください。
すると、ifブロック の中には、三つの値("最初の文字列" "2番目の文字列" "最後の文字列")
が、ありますが、返されているのは、"最後の文字列" だけですね。
そうです、最後の値/最終結果 のみ、返される、、ということに、
注意してください。


3. 式 でもあり、文 でもある
そうです、「式でもあり、文でもある」 ということもあり得ます。
これも、例文を、見れば、一目瞭然ですね。

if部分 では、if文 として、
  println("ここは、elseブロック の中です。")
を、実行し、
if式 としては、変数returnIf に、
  "elseブロック"
を、返しています。

when部分も、同様に考えてください。



まとめ
Kotlin は、if/when を、式/文 で、使えることによって、
例えば、条件分岐が、多い時、式 として使えば、
コンソールに出力するための、println()関数 は、1回で、OKだ。

ここで使われたコードを見て、理解できますか?
  num1
  num2
  num3