Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyのケースステートメントの多くの用途

if / elsifを使用する必要があるときはいつでも 代わりにRubyのcaseステートメントを使用することを検討できるステートメント。この投稿では、いくつかの異なるユースケースと、それが実際に内部でどのように機能するかを学びます。

Rubyのケースステートメントの多くの用途

注:他のプログラミング言語では、これはスイッチとして知られています。 ステートメント。

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ステートメントがどのように機能するか、そしてそれがどれほど柔軟であるかを学びました。今度は、自分のプロジェクトでそれを最大限に活用し始める番です。

この記事がお役に立てば幸いです。

より多くの人が学ぶことができるように、この投稿を共有してください! 🙂


  1. Rubyのデコレータデザインパターン

    デコレータのデザインパターンは何ですか? そして、Rubyプロジェクトでこのパターンをどのように使用できますか? デコレータデザインパターンは、新機能を追加することでオブジェクトを強化するのに役立ちます クラスを変更せずにそれに。 例を見てみましょう! ロギングとパフォーマンス この例では、rest-clientのようなgemを使用してHTTPリクエストを作成しています。 次のようになります: require restclient data = RestClient.get(www.rubyguides.com) 今 : 一部のリクエストにログを追加したいが、RestCli

  2. iPhone のホーム ボタンの多くの用途

    iPhoneが最初に世界に紹介された時から、「ホームボタン」はiPhoneの最も永続的な機能として残っています。徐々にAppleはこのボタンで多くの革新を行ってきました.しかし、iPhone X より前のデバイスでは、ボタンは 1 つですが、多くのタスクを実行するには十分です。 iPhoneのホームボタンには多くの用途がありますが、その用途のいくつかを知っているかもしれません。この記事では、iPhone のホーム ボタンを使用して実行できるすべてのことをまとめてリストしようとしています。 ホームボタンのよく知られた使い方から始めましょう Siri を長押しします。 ダブルクリックして、実行中