- 更新日: 2017年09月14日
- 公開日: 2017年08月14日
Rubyのif文 - 条件分岐
Rubyのifを使った条件分岐
Rubyにおけるif文は、他の多くのプログラミング言語と同じく、条件分岐をする際に用いる制御構文のひとつです。
ifが英語で「もしも〜」という意味を持つように、if文は「もしも○○であるならば△△という処理を行う」といった条件付きで実行したい処理がある場合に使います。実際のWebサービスでは例えば「5000円以上の購入で送料無料」「ある特定の商品にだけクーポンを利用可能にする」などといった場面で利用されています。
また、elseやelsifを組み合わせることにより、単一条件ではなく複数条件を使って処理を切り替えることも可能です。例えば「5000円以上の購入で送料無料、3000円以上の購入で送料半額」といった場合には複数条件が用いられます。
この記事では実際のif文の書き方を学んでいきましょう。
if
最も基本的なif文の書式が下記です。
if (条件式)
(実行したい処理)
end
ifの後に続く条件式は「もしも○○であるならば」の○○の部分に相当します。条件式に合致するかどうかの判定をすることを評価するといいます。
n = 80
if n > 70
puts '合格です'
end
上の例では、nの値は80となっており、条件式「n>70」はtrueと評価されるため、if文の中の処理が実行され、結果は「合格です」と表示されます。
n = 50
if n > 70
puts '合格です'
end
ところがn = 50の場合は、条件式がfalseと評価されるため、if文の中の処理は実行されず、結果は何も表示されません。
ただ、このような書き方をすると、条件に合致しなかったから結果が表示されなかったのか、それとも単にエラーが起こって表示されなかったのかが判断しにくいため、通常は複数条件でif文を使うことが多いです。複数条件の場合には後で紹介するelseやelsifを使用します。
else
elseは、if文において条件に合致しなかった場合に実行したい処理がある場合に記述します。
if (条件式)
(条件式に合致した場合に実行したい処理)
else
(条件式に合致しなかった場合に実行したい処理)
end
n = 50
if n > 70
puts '合格です'
else
puts '不合格です'
end
n = 50の時には条件式「n>70」に合致しないため、ifではなくelse句の中身が実行され、結果は「不合格です」と表示されます。このようにelseを使うことでif文の実行結果を分かりやすく表示することもできます。
else句は必要がない場合は記述しなくても問題ありません。
elsif
elsifはifで記述した条件式に当てはまらなかった場合に、さらに別の条件式に合致するかを判定したい場合に利用します。elsifは必要な数だけ追記することができます。
if (条件式1)
(条件式1に合致した場合に実行したい処理)
elsif (条件式2)
(条件式2に合致した場合に実行したい処理)
end
Rubyでは「else if」ではなく「elsif」と記載する点に注意しましょう。
n = 65
if n > 70
puts '合格です'
elsif n > 60
puts '補欠合格です'
else
puts '不合格です'
end
n=65のため、結果は「補欠合格です」と表示されます。
elsifで注意すべきは、条件式は上から順に評価されていき、trueになった時点でその後の条件式は評価されないということです。つまり、複数条件に合致する場合でも最初に合致した処理内容のみが実行されます。
上の例では、n=80の場合、nは「n>70」「n>60」の両方の条件を満たしますが、最初に合致した「n>70」の中身だけが実行され、「合格です」が表示されます。
3項演算子がifのかわりになる?
if文と似た構文に3項演算子があります。3項演算子は下記のような書式になり、場合によってはifの代わりに用いることができます。
(条件式) ? (条件式に合致した場合の式) : (条件式に合致しなかった場合の式)
先ほど使用したif文の例を3項演算子で書き換えると下記のようになります。
n = 80
(n > 70) ? '合格です' : '不合格です'
「n>70」はtrueとなるので、結果は「合格です」と表示されます。
if文との違いとしては、3項演算子では条件式の評価後に実行される処理が単行である必要があることです。もし2行以上の処理を実行したい場合は3項演算子ではなくif文を使いましょう。
また、3項演算子は可読性の低さから利用が推奨されない場合があります。上の例ではif...else文の書き換えとなっているのでシンプルで分かりやすく見えますが、複数条件の場合には3項演算子を入れ子にする必要があり、可読性が一気に低下します。
例えばif...elsif...else文を3項演算子に書き換えると下記のようになります。
(n > 80) ? '合格です' : (n > 70 ) ? '補欠合格です' : '不合格です'
このように複数条件になると、直観的に分かりづらくなります。コードは基本的に他人が読んだ時に分かりやすいものを書くことが望まれます。慣れるまではひとつの基準として、if...else文で処理が単一行の場合のみ、3項演算子を利用するようにするといいでしょう。
\Rubyでのサービス開発スキルが身に付く/
まとめ
- この記事を書いた人
- CodeCampus編集部