Rubyのケースステートメントの多くの用途
if / elsif
を使用する必要があるときはいつでも 代わりにRubyのcaseステートメントを使用することを検討できるステートメント。この投稿では、いくつかの異なるユースケースと、それが実際に内部でどのように機能するかを学びます。
注:他のプログラミング言語では、これはスイッチとして知られています。 ステートメント。
Rubyのcaseステートメントのコンポーネント:
ケース | |
いつ | 一致する可能性のあるすべての条件は1つのwhenステートメントです。 |
その他 | 一致するものがない場合は、これを実行します。オプション。 |
ルビーケースとレンジ
case
ステートメントは、一見したところよりも柔軟です。値が含まれる範囲に応じてメッセージを出力する例を見てみましょう。
case capacity when 0 "You ran out of gas." when 1..20 "The tank is almost empty. Quickly, find a gas station!" when 21..70 "You should be ok for now." when 71..100 "The tank is almost full." else "Error: capacity has an invalid value (#{capacity})" end
このコードは、if / elsif
に比べてかなりエレガントだと思います。 バージョンは次のようになります。
Rubyケースと正規表現
when
として正規表現を使用することもできます 調子。次の例では、serial_code
があります。 この製品がどれほど危険であるかを示す最初の文字が付いています。
case serial_code when /\AC/ "Low risk" when /\AL/ "Medium risk" when /\AX/ "High risk" else "Unknown risk" end
Rubyケースを使用しない場合
単純な1:1マッピングがある場合、このようなことをしたくなるかもしれません。
case country when "europe" "https://eu.example.com" when "america" "https://us.example.com" end
私の意見では、代わりにこれを行う方が良いでしょう:
SITES = { "europe" => "https://eu.example.com", "america" => "https://us.example.com" } SITES[country]
ハッシュソリューションは、より効率的で操作が簡単です。思いませんか?
ケースの仕組み:===メソッド
case
がどのようになっているのか疑問に思われるかもしれませんが、 ボンネットの下で動作します。最初の例に戻ると、これが起こっていることです:
(1..20) === capacity (21..70) === capacity (71..100) === capacity
ご覧のとおり、Rubyが===
を呼び出すため、条件が逆になります。 左側のオブジェクトにあります。 ===
は、任意のクラスで実装できる単なるメソッドです。この場合、Range
値が範囲内で見つかった場合にのみtrueを返すことにより、このメソッドを実装します。
これが===
の方法です Rubiniusで実装されています(Range
の場合) クラス):
def ===(value) include?(value) end
ソース:https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178
手順+ケース
===
を実装するもう1つの興味深いクラス Proc
です クラス。
関連記事 :procsとlambdasの詳細をご覧ください。
この例では、2つのprocs
を定義します 、even
をチェックするための1つ 番号、およびodd
用にもう1つ 。
odd = proc(&:odd?) even = proc(&:even?) case number when odd puts "Odd number" when even puts "Even number" end
これが実際に起こっていることです:
odd.===(number) even.===(number)
===
を使用する プロシージャでcall
を使用するのと同じ効果があります 。
結論
Rubyのcaseステートメントがどのように機能するか、そしてそれがどれほど柔軟であるかを学びました。今度は、自分のプロジェクトでそれを最大限に活用し始める番です。
この記事がお役に立てば幸いです。
より多くの人が学ぶことができるように、この投稿を共有してください! 🙂
-
Rubyのデコレータデザインパターン
デコレータのデザインパターンは何ですか? そして、Rubyプロジェクトでこのパターンをどのように使用できますか? デコレータデザインパターンは、新機能を追加することでオブジェクトを強化するのに役立ちます クラスを変更せずにそれに。 例を見てみましょう! ロギングとパフォーマンス この例では、rest-clientのようなgemを使用してHTTPリクエストを作成しています。 次のようになります: require restclient data = RestClient.get(www.rubyguides.com) 今 : 一部のリクエストにログを追加したいが、RestCli
-
iPhone のホーム ボタンの多くの用途
iPhoneが最初に世界に紹介された時から、「ホームボタン」はiPhoneの最も永続的な機能として残っています。徐々にAppleはこのボタンで多くの革新を行ってきました.しかし、iPhone X より前のデバイスでは、ボタンは 1 つですが、多くのタスクを実行するには十分です。 iPhoneのホームボタンには多くの用途がありますが、その用途のいくつかを知っているかもしれません。この記事では、iPhone のホーム ボタンを使用して実行できるすべてのことをまとめてリストしようとしています。 ホームボタンのよく知られた使い方から始めましょう Siri を長押しします。 ダブルクリックして、実行中