Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Rubyには条件分岐を行う構文として「if」と「case」があります。

「if」文は、条件に一致した時だけ行う処理を実装する時に使用し、「case」文は複数の候補の中から一致する条件の処理を行う処理を実装する時に使用します。

if文とは

「if」構文は、ある条件の時だけ特定の処理を実行したり、逆に条件に一致しなかった時に実行される処理を記述したりするなど、条件によって処理を分ける時に使用する制御構文です。

Rubyにおける「if」文の構文は次の通りです。

if 条件式 then
  #条件式が一致した時に実行される処理
end

Rubyではthenキーワードは省略してもよい事になっているため、次のようのthenを省略した書き方もできます。

if 条件式
  #条件式が一致した時に実行される処理
end

elsif構文を使用して、複数の条件式を記述することもできます。
次の例ではifで指定した条件式1に一致しなかったこ時に、条件式2、条件式3の順に判定していき、どの条件にも一致しなかった時に、elseブロックの中の処理が実行されます。

if 条件式1 then
  #条件式1に一致する時に実行される処理
elsif 条件式2
  #条件式2に一致する時に実行される処理
elsif 条件式3
  #条件式3に一致する時に実行される処理
else
  #どの条件にも致しなかった時に実行される処理
end

case文とは

「if」文が条件式を組み合わせて複雑な条件分岐を扱えるのに対し、「case」文は、変数や計算式の結果から一致する値の候補を探して、一致した値の処理を実行する時に便利な構文です。

Rubyの「case」文の構文は次の通りです。

case 比較対象とする変数など
when 値1 then
  #値1と一致した時に実行される処理
when 値2 then
  #値2と一致した時に実行される処理
else
  #いずれの値に一致しない時に実行されるとき
end

「if」が結果がtrueまたはfalseになる条件式を組み合わせるのに対し、「case」は比較対象の変数などの値の候補をwhen <値>:で1つ以上指定します。

そして、比較対象の変数などと一致するwhen <値>:があると、その下のコードブロックが実行されまます。when <値>:で指定された候補の値のいずれにも一致しない場合は、elseで指定したコードブロックが実行されます。

ちなみにcase文も、thenキーワードは省略してもよい事になっているため、次のようのthenを省略した書き方もできます。

case 比較対象とする変数など
when 値1 
  #値1と一致した時に実行される処理
when 値2 
  #値2と一致した時に実行される処理
else
  #いずれの値に一致しない時に実行されるとき
end

値の範囲、以上、以下を調べる時

「case」文で値の範囲や、ある値以上・以下を調べる時は、when 開始…終了のように範囲を指定できます。

case value
when 0..10
  puts "値は0-10の範囲内です"
else
  puts "範囲外です"
end

開始にnilを指定すると、終了以下の値であることを判定でき、終了にnilを指定すると開始以上の値であることを判定できます。

case value
when nil..19
  puts "値は19以下です"
when 20..nil
  puts "値は20以上です"
end
ポテパンダの一言メモ

whenで値を指定する時に、カンマで区切って複数の値を指定することも可能です。

when 値3,値4,値5 then

「if」と「case」の使い分け

「if」と「case」文は、どちらも条件分岐を行う構文で「if」文で書けることは基本的に「case」でも書くことができ、どちらを使うべきかの明確なルールは存在しません。

では、「if」と「case」文はどのように使い分ければよいのでしょうか?

実例のサンプルコードを用いながら、「if」と「case」文のそれぞれに適した利用シーンを見ていきましょう。

シンプルな条件の二分岐

まずは、条件に一致した時と、一致しなかった時で処理が分かれる二分岐で、「if」と「case」文をそれぞれ使ってみます。

【if文】

if rank == "A" then
  puts "ランク「A」です"
else
  puts "ランク「A」以外です"
end 

【case文】

case rank
when "A"
  puts "ランク「A」です"
else
  puts "ランク「A」以外です"
end

このように、シンプルな条件の二分岐であれば、「if」と「case」文どちらを使ってもコードの可読性は高くなりますが、このようなケースの場合は「if」の方が一般的に用いられます。

ただし、上のコードが将来的にランクB,C,D…のように

複雑な条件の二分岐

複数の条件があるような複雑な条件の時は、多くの場合で「if」文を使用します。

次のサンプルコードは、2つスコアが共に80点以上なら「合格」、どちらか一方が50点以上なら「再テスト」、いずれも50点未満なら「不合格」とするような条件分岐を「if」と「case」文で書いたものです。

【if文】

if scoreA >= 80 and scoreB >= 80
  puts "「合格」です"
elsif scoreA >= 50 or scoreB >= 50
  puts "「再テスト」です"
else
  puts "「不合格」です"
end 

【case文】

case scoreA
when 80..nil
  case scoreB
  when 80..nil
    puts "「合格」です"
  else 
    puts "「再テスト」です"
  end
when 50..79
  puts "「再テスト」です"
when nil..49
  case scoreB
  when nil..49
    puts "「不合格」です"
  else 
    puts "「再テスト」です"
  end
end

このように、「case」で複雑な条件を表現するとコードの可読性が悪くなりがちになるため、複雑な条件の時は「if」文を用います。

多分岐

多分岐とは、if 〜 elsie 〜 elseなどを使って複数条件を記述し、条件によって3つ以上の処理ブロックに処理が分岐することを指します。

次のサンプルコードは、ランクA、B、C、Dとそれ以外のランクにって条件分岐するコードを「if」と「case」文で書いたものです。

【if文】

if rank == "A" then
  puts "ランク「A」です"
elsif rank == "B"
  puts "ランク「B」です"
elsif rank == "C"
  puts "ランク「C」です"
elsif rank == "D"
  puts "ランク「D」です"
else 
  puts "ランクA〜D以外です"
end 

【case文】

case rank
when "A"
  puts "ランク「A」です"
when "B"
  puts "ランク「B」です"
when "B"
  puts "ランク「B」です"
when "B"
  puts "ランク「B」です"
else
  puts "ランクA〜D以外です"
end

このように、条件が3つ以上ある多分岐で、条件式もある程度シンプルであればな「case」文の方が可読性が高くなります。

if, caseの使い分けは可読性を重視

先述のように、「if」と「case」文の使い分けには明確なルールが存在しません。

使い分けにも諸説ありますが、「if」と「case」文の使い分は、基本的にはコードの可読性や後々のメンテナンス性が高いほうを選ぶのが良いでしょう。

さいごに

「if」と「case」文の基本的な構文と、その使い分けについて解説してきました。

よいプログラマ とは、可読性が高いコードを書けるのも一つの要素ですので、この記事で紹介した「if」と「case」文の使い分けを実践していきましょう。

【関連記事】
Rubyにおけるブロック構文(do~end)の使い方

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。