Rubyにおけるケースとレンジ

Mehdi Farsi

Follow

Jul 22, 2019 – 3 min read

この記事では、以下のトピックについて探っていきます。

  • .. 演算子
  • …演算子
  • レンジと浮動小数点値

Feel casewhenCase statement behind the sceneの記事をお読みください。

はじめに

私たちの最新プロジェクトをご紹介できることを嬉しく思います。

この記事のシェアをお願いします!

私たちの最新のプロジェクトである「Fun Facts about Ruby – Volume 1」をご紹介します。 🙏

よろしくお願いします!

casewhen節はパラメータとして範囲を取ることができます

ここです。 caseステートメントは、パラメータとして整数を受け取ります。

whenRange#=== 演算子が呼び出され、整数が範囲に含まれているかどうかをチェックします。

範囲内の .. 演算子は、左と右のオペランドが範囲に含まれていることを確認します。

2番目の when 節は、…演算子を使用して範囲を取ります。

これは、右のオペランドが範囲に含まれていないことを意味します。

when 節と範囲について理解したところで、浮動小数点数と範囲を使用して遭遇したエッジケースを説明します。

浮動小数点数の範囲と when 節

上の例で見たように、…演算子は範囲の右オペランドを除外します。 しかし、左オペランドを除外したい場合はどうすればよいでしょうか。

ここです。

ここでは、whensurfacewhen 70..90 then :second_valueです。

この場合、case:second_value を返します。

そのため、90surfacewhen句が評価されることはありません。

これは整数の範囲であれば問題なく動作します。

しかし、浮動小数点数の範囲を処理しなければならない場合はどうでしょうか。

ここです。 case文は、surface130.0:third_valueを返します。

surface = 130.0case:second_value を返します – 整数の範囲と同じです。

最後の範囲を終了するために Float::INFINITY 定数を使用していることに注意してください。

これは 130.0 以上の値と同じです。

最後に、無限の範囲という概念を見てみましょう。6.0.

6行目で、レンジは明示的に右オペランドを省略しています。

Rubyはこれを次のように解釈します。 130..Float::INFINITY

これにより、Float::INFINITYを暗に呼び出してレンジを終了させる必要がなくなりました。

このように、surfacecase:third_valueを返します。

Voilà!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です