

この記事では、以下のトピックについて探っていきます。
-
..
演算子 - …演算子
- レンジと浮動小数点値
Feel
case
when
Case statement behind the scene
の記事をお読みください。
はじめに
私たちの最新プロジェクトをご紹介できることを嬉しく思います。
この記事のシェアをお願いします!
私たちの最新のプロジェクトである「Fun Facts about Ruby – Volume 1」をご紹介します。 🙏
よろしくお願いします!
case
when
節はパラメータとして範囲を取ることができます
ここです。 case
ステートメントは、パラメータとして整数を受け取ります。
when
Range#===
演算子が呼び出され、整数が範囲に含まれているかどうかをチェックします。
範囲内の ..
演算子は、左と右のオペランドが範囲に含まれていることを確認します。
2番目の when
節は、…演算子を使用して範囲を取ります。
これは、右のオペランドが範囲に含まれていないことを意味します。
when
節と範囲について理解したところで、浮動小数点数と範囲を使用して遭遇したエッジケースを説明します。
浮動小数点数の範囲と when 節
上の例で見たように、…演算子は範囲の右オペランドを除外します。 しかし、左オペランドを除外したい場合はどうすればよいでしょうか。
ここです。
ここでは、when
surface
when 70..90 then :second_value
です。
この場合、case
:second_value
を返します。
そのため、90
surface
when
句が評価されることはありません。
これは整数の範囲であれば問題なく動作します。
しかし、浮動小数点数の範囲を処理しなければならない場合はどうでしょうか。
ここです。 case文は、surface
130.0
:third_value
を返します。
surface = 130.0
case
:second_value
を返します – 整数の範囲と同じです。
最後の範囲を終了するために Float::INFINITY
定数を使用していることに注意してください。
これは 130.0
以上の値と同じです。
最後に、無限の範囲という概念を見てみましょう。6.0.
6行目で、レンジは明示的に右オペランドを省略しています。
Rubyはこれを次のように解釈します。 130..Float::INFINITY
これにより、Float::INFINITY
を暗に呼び出してレンジを終了させる必要がなくなりました。
このように、surface
case
:third_value
を返します。
Voilà!