階層的条件 if 特別式は else 引数を利用することによって階層的な値の検出を行うことができます。 例えば (if test1 then1 (if test2 then2 (if ... という具合に、「~でなければ、~でなければ」という形に記述することができます。 こうすれば、階層的にデータを評価することができ、複数の複雑な条件を満たしているかどうかなどを調べることができます。 こうした階層的な分岐はプログラミングでは珍しいものではありません。 C言語のような手続き型言語でも、次のような if 文の階層化は頻繁に発生しています。 if (test1) { ... } else if (test2) { ... } else if (test3) { ... } ... しかし、関数型言語である LISP では、これを頻繁に記述するとコードが読みにくくなってしまいます。 もちろんある程
前フリ 奥様、知ってらした?Rubyのcase式ってすっごくパワフルなんですって!単なる同値判定で振り分けるだけじゃなくて、例えばこんなこともできちゃうらしいんですのよ! case gets.chomp when /おはよう/ puts 'おはようございます、お目覚めはいかがですか?' when /こんにちは/ puts 'こんにちは、いい天気ですね。' when /こんばんは/ puts 'こんばんは、遅くまでお疲れ様です。' else puts '何か御用でしょうか?' end あたくし、今までcase式の実力を見くびっていましたわ…! カラクリ どうしてこんなことができるのかというと、リファレンスマニュアルにも書いてあることなのですが、case式は===演算子を使ったif〜elsif〜end式と等価な処理を行うように実装されているからなんですね。 要は、この===演算子がキモなわけで
「Rubyのcase」を一瞥し「あー要は〇〇(言語名)のswitchね」などと早合点し、その後もその真の価値を知ることなく一生を終えるプログラマが近年跡を絶たない。加えて、「今更条件分岐?RubyはOOPなんだからポリモフィズムじゃね?」とか「HashにProc突っ込んでcallするのがオレ流。」とかうそぶく人たちもまた増加の一途を辿っている。 そんな世の中にあって、ぼくは一言、できればガツンと一言申し上げたい。生まれも育ちもRubyなぼくから、是非ともそんな人たちに「Rubyのcase」について一言申し上げておきたい。 ─ 問題1 ─ 名前name、レベルlevel、ポイントpointの各属性を持った複数のCharacterオブジェクトcharlie, liz, benがある。 class Character < Struct.new(:name, :level, :point) def
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く