値を返す条件式
ここまで触れてきませんでしたが、いままで紹介してきた構文はすべて「式」であり、値を返します。この特性は非常に便利で、たとえば一例として本番環境・ステージング環境・開発環境でアクセスするAPIのURLを切り替えるときを考えてみます。
例のように、if式の返す値を変数に代入してやれば変数代入が一箇所にまとめることができます。
三項演算子のところで取り上げた例はそれぞれの節内でputsしていましたが、三項演算子自体が値(この例だと文字列)を返すため以下のようにも書けます。
case
case
は可能性を並列に並べるときに使います。case
は言語によっては switch
や cond
という名前で似た機能が提供されていることもあります。
また、caseもif式や三項演算子のように値を返します。例として上記の環境によるURL切替処理をcaseを使って書き換えてみましょう。
さて、上の例では単純に「==
」による文字列比較と同じ動作をしていますが、when部分では内部的に 「===
」演算子による等価評価が行われているため、より柔軟なマッチをサポートしています。
「===
」はデフォルトでは内部的に「==
」を呼び出すだけですが、いくつかのクラス(Range, Moduleなど)で再定義されているため、たとえばオブジェクトのクラスによって処理を分岐させたり、
whenのあとにRangeクラスのオブジェクトを置いて、含まれる範囲で処理を分けることも出来ます(ifで大小の不等号を並べるよりも読みやすいのではないかと思います)。
詳しくはObject#===
のリファレンス(class Object)を参考にしてください。