case 文

参考:

Ruby の case 文 – Qiita

Ruby で switch 文はどう書くの? | ぺけみさお

Ruby の case を〇〇 (言語名) の switch 文だと思っている人たちにぼくから一言ガツンと申し上げたい | hp12c

Ruby の case 文は when 節に渡すオブジェクトによって振る舞いが異なる | 一から勉強させてください

case – 制御構造 (Ruby 2.5.0)

Ruby’s case statement | Honeybadger Developer Blog

=== 演算子

参考:

case と === の歴史 – Qiita

Ruby の case 式と === 演算子について | しばそんノート

Can procs be used with case statements in Ruby 2.0? – Stack Overflow

case 文で正規表現 (Regexp) を使う

case name
when /Alice|Bob/
  puts "Hello!"
else
  puts "Bye!"
end

参考:

case 文でも正規表現が使えるんです (ドヤ顔) | Bye Bye Moore

case 文の条件で正規表現を使って内部でマッチ部分を使いたいとき – Qiita

クラスを判別する

when の後にクラスを列挙する。

class A; end; class B; end
case A.new
when A, B then puts "This is A or B."
else "I don't know." end

参考:

ruby におけるポリモーフィズムでサブクラス名による条件分岐 | teratail

case で変数のクラスを比較しようとすると上手く行かない – スタック・オーバーフロー

Lambda / Proc を使う

Proc のインスタンスを渡した場合に === の代わりに call が呼ばれる。(Proc#===Proc#call のエイリアス。)

参考:

case でいろいろやってみた – Qiita

Ruby の case 文で配列に特定の値が含まれているかチェックする方法 – Qiita

Lambdas / Procs in Case Expressions | think (batsov.com)

instance method Proc#=== (Ruby 2.6.0)

Can procs be used with case statements in Ruby 2.0? – Stack Overflow

case 文で if 文と同じように真偽を判定する

case Object.new
when -> (x) { !!x } then "This is truthy."
when nil, false     then "This is falsy."
end

参考:

Bool 値かどうか型チェックしたい。ついでに is_bool? メソッドを作ってみた。| かもメモ

Ruby の true と false の話 – Qiita

case 文で条件式を使う

※ 非推奨

case 文で true を与えるか、あるいは値を与えなかった場合、複数の条件式を判定して条件分岐することができる。通常の if 文 (if … elsif … else … end) を使って書ける。

case true を使った場合

case true
when obj.nil?     then puts "This is nil."
when obj.is_a?(A) then puts "This is A."
when obj.is_a?(B) then puts "This is B."
else puts "This is unknown." end

値なしの case

case
when obj.nil?     then puts "This is nil."
when obj.is_a?(A) then puts "This is A."
when obj.is_a?(B) then puts "This is B."
else puts "This is unknown." end

通常の if 文を使って書ける。

if    obj.nil?     then; puts "This is nil."
elsif obj.is_a?(A) then; puts "This is A."
elsif obj.is_a?(B) then; puts "This is B."
else puts "This is unknown." end

参考:

Ruby 条件分岐について (if, unless, case, 三項演算子) | TASK NOTES

‘case true’ when does it block loop? – Stack Overflow

Tips

参考:

true / false と nil の違いの有用なケース | 会者定離で

タグ:

コメントを残す

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