6日目:人生は選択の連続
アドベントカレンダー6日目の今日は、条件分岐式についてお話ししたいと思います。条件分岐文でないことに注意してください。式なのです。何か値を返す、これも関数型プログラミング的アプローチのひとつです。
if式
まず1つ目に紹介するのは馴染みの深いキーワード if と else による条件分岐式です。前述の通り、Kotlinの if と else は値を返します。そのためそれらはちょうどJavaの ? と : に似ています*1。
上記の例の場合、if と else ブロック内の式がたった1つなので波括弧を省略できます。else がなく if のみの場合や、1つでもUnitを返す分岐が存在する場合、その if式全体の結果がUnitとなります。
when式
Kotlinにはwhen式というJavaのswitch文と似た機能がありますが、それよりも強力な仕組みです。
when式はswitch文のように、引数の値が分岐条件に合致するまで上から順に比較していきます。分岐条件が満たされると -> の右側の式を返します。switch文のような break はありません。もし次の分岐に飛びたい場合は continue を記述します*2。
上記の例において、number が 1 の時、when式は "1st" を返します。number が 4から9までのいずれかである場合は、その数の後に "th" がくっついた文字列が返されます。
in 10..20のような書き方もできます。この意味は「 number が10以上20以下である場合」です。.. はレンジというオブジェクトの生成演算子です。詳細は後日紹介します。
どの分岐条件にも当てはまらなかった場合には else の先の式が返されます。when式には else が必須であることに注意してください。
when式は次のように記述することでif else ifの長ったらしい分岐を簡潔に表現することができます。
ここでの関数 fizz と buzz の返り値の型は Boolean です。例えば fizz(a) のみが true を返す場合、このwhen式は "fizz" を返します。
when式は次のような簡単なパターンマッチングをサポートしています。
この例は、obj の型をチェックして、対応する文字列を返すwhen式となっています。将来的には、より複雑なパターンマッチができるようになるらしいです。
まとめと次回予告
今日は条件分岐ということで、if式とwhen式を学びました。「式」なので、両者は値を返します。when式はJavaのswitch文と似ていますが、レンジとの比較や簡単なパターンマッチングなどにも対応しており強力です。
明日はループについてお話しします。