はじめに

Rubyのプログラミングは楽しくなってきましたか?
ここからは制御構造の学習に入っていきましょう。Rubyのプログラムは、基本的に上から下に実行されます。
これまでは書いたコードがそのまま実行されていましたね。
しかし、ときには実行したりしなかったり、または繰り返したりすることも必要になります。
それを実現するのが、制御構造です。
この記事では、Ruby初心者の方向けに、制御構造のひとつである条件分岐についてお伝えしていきます。
条件分岐をマスターして、プログラミングの幅を広げましょう。

条件分岐ってなに?

条件分岐とは、条件によってプログラムの実行経路を分岐させることです。
つまり、条件によって実行したりしなかったりするコードが書けるというわけです。
一口に条件分岐といっても、Rubyには複数の構文が用意されています。そ
れぞれ使い方や役割が異なるため、すべて覚えて使い分けられるようにしておきましょう。
まずは、if文からです。

条件分岐にはif文を使う

if文は、最も基本的な条件分岐構文です。次の例をみて下さい。
例:

num = 100
if num > 10
puts "10より大きいです"
end

この例では、変数numが10より大きい場合にのみメッセージが出力されます。
試しに、変数numを10以下の数値に書き換えてみて下さい。なにも表示されなくなります。
if文では、条件が真(true)の場合にのみコードが実行されます。
真とは条件が成り立っていることを示し、成り立っていない場合は偽(false)となります。
これは真偽値(bool値)と呼ばれるもので、条件判定文の結果となります。
また、if文は次のように複数の条件を指定することもできます。
例:

num = 100
if num > 100
puts "100より大きいです"
elsif num > 10
puts "10より大きいです"
elsif num > 1
puts "1より大きいです"
else
puts "1以下です"
end

例のように、elsif文を続けることで、複数の条件を指定できます。
この場合、条件に一致した文のみ実行されます。
条件判定は上から行われるため、条件を書く順序に注意しないと、絶対に実行されない文が生まれてしまいます。
最後のelse文は、どの条件も成り立たなかった場合に実行されます。
さらに、if文は次のように式の後ろに書くこともできます。
例:

puts "10より大きいです" if num > 10

これは後置if文と呼ばれるもので、意味的には先ほどの通常のif文と同じです。
コードが単一行の場合には、こちらのほうがシンプルに書けます。

条件によってunless文も活用しよう

if文に似たものとして、unless文があります。
unless文は、次のようにif文とはまったく逆の性質を持っています。
例:

num = 10
unless num > 10
puts "10より大きくないです"
end
puts "10より大きくないです" unless num > 10

このように、unless文は条件が偽(false)のときのみ実行されます。
なぜunless文が用意されているかというと、条件によっては偽のときに実行されるように書いたほうがわかりやすいこともあるからです。
条件によってif文とunless文を使い分けましょう。

条件判定に使われる比較演算子について

条件判定には、比較演算子が使われることが多いです。
上の例でも、条件判定に比較演算子をつかっています。次の6種類あるので、すべて覚えておきましょう。
・「=」:等しい
・「!=」:等しくない
・「<」:〜より大きい ・「>」:〜より小さい
・「<=」:〜より大きいまたは等しい ・「>=」:〜より小さいまたは等しい

単純な文字列比較ならcase文が便利

単純な文字列比較であれば、if文よりもcase文が適しています。
case文は、次のように値が一致する文を実行します。
例:

animal = "Cat"
case animal
when "Dog", "Monkey"
puts "hate"
when "Cat", "Bird"
puts "like"
when "Snake", "Bee"
puts "fear"
end

同じことはif文でも実現できますが、一致するかどうか調べるだけならif文よりもシンプルに記述できます。
用途によって使い分けましょう。

まとめ

条件分岐がお分かりになりましたか?
一口に条件分岐といっても、実にさまざまな方法があります。
用途に合わせて、適切な構文を使い分けましょう。
また、条件判定によく使われる比較演算子についてもしっかりおさえておいて下さい。
条件判定の結果はbool値(true/false)になることも忘れないようにしましょう。