公開日: | 最終更新日:
【Ruby】 if文を使っての条件分岐の方法をマスターしよう!
if文とは、ある条件の時にはAの処理を行い、別の条件の時にはBの処理を行うなど、条件によって処理を分けたい時に使う構文です。
1
2
3
4
5
6
7
if 条件式1
# 処理A
elsif 条件式2
# 処理B
else
# 処理C
end
if文の基礎情報
この章では、if文の使い方や基礎情報について解説します。
条件分岐
プログラミングをしていると条件によって処理を変えたいというときが頻繁に訪れます。
例えばユーザー登録機能があるアプリを作成する時、ユーザーがログインしていれば「ログアウト」ボタンを表示して、ログアウトしていれば「ログイン」ボタンを表示させたいですよね?
そんな条件毎に処理を変えたい時に使うのが条件分岐の制御構文になります。
ifはそんな制御構文の一つで下記のように定義します。
1
2
3
4
5
if 条件式 then
条件式がtrueの時に実行されるコードA
else
条件式がfalseの時に実行されるコードB
end
上のコードの場合、条件式がtrueであればAのコードが実行され、true以外、すなわちfalseの時にはBのコードが実行されます。
ちなみに最初の行のthenは省略が可能で、あまり書くことはありません。
実際にコードを書いて実行してみましょう。
上の動画ではnumという変数に数字の0を代入しています。
そしてif文の条件式の中でnumが0であればその下のコードの「puts "0です。"」を実行します。
numが0以外であればelseの下のコード「puts "0以外の数字です。"」というコードが実行されます。
条件式の返り値はtrueなので「puts "0です。"」が実行されました。
今回のコードではnumという変数は0に固定されているので、実際にユーザーに入力してもらうようgetsメソッドを使ってみましょう。
今回はnumにターミナルで入力された5という数字が入ったので、条件式は 5 == 0 でfalseが返ります。
よってelseで指定したコードが実行されたというわけです。
では条件を増やしたい時にはどうしたら良いのでしょう。
条件を増やしてみよう
ifとelseだけだと条件は1つしか指定できません。
ですがelsifを使うことにより条件を追加することができます。
「elseif」とsの後にeが入らないので注意しましょう。
1
2
3
4
5
6
7
if 条件式 then
実行されるコードA
elsif 条件式
実行されるコードB
else
実行されるコードC
end
上のようにifの下に書くと条件を増やすことができます。
流れとしてはまずifの右に書いた条件式の判定が行われ、trueであればAのコードが実行されます。
もしfalseであれば次のelsifの条件式の判定が行われ、trueであればBのコードが実行されます。
もしfalseであればelseで指定したCのコードが実行されます。
elsifは何個でも追加できるので好きなだけ条件を増やすこともできます。
論理演算子を使ってみよう
||
や&&
のような「論理演算子」を使用すると、複数の条件式を組み合わせたりすることもできます。
複数の条件を満たす時(〜かつ〜)
条件式は1つだけでなく、複数の全ての条件を満たす時というふうな書き方もできます。
1
2
3
4
5
6
7
if 条件式A && 条件式B
実行されるコード
elsif 条件式
実行されるコード
else
実行されるコード
end
上のように 「&&」で繋ぐと条件式を増やすことができます。
条件式A && 条件式B && 条件式C
というように何個でも指定が可能です。
「&&」の使い方について詳細は、「論理積(AND)を表す論理演算子」を参考にしてください。
どれか1つの条件を満たす時(または〜)
「&&」は全ての条件を満たす時でしたが、「||」を使うと「どれか1つでも満たせば〜」という風な指定も可能です。
1
2
3
4
5
6
7
if 条件式A || 条件式B
実行されるコード
elsif 条件式
実行されるコード
else
実行されるコード
end
このように||
は、「条件式Aまたは条件式Bどちらかがtrueなら〜」という指定ができます。
「||」の使い方について詳細は、「論理和(OR)を表す論理演算子」を参考にしてください。
1つの条件の時にだけコードを実行させる方法
if文ではifの条件式がfalseの時にelseのコードを実行すると書きましたが、elseのコードを指定しないで書くこともできます。
1つの条件の時にだけコードを実行させたい時にはよく使います。
1
2
3
4
num = 0
if num == 1
puts "1です。"
end
上のコードの場合、条件式はfalseになるのでif文の中にあるコードは実行されません。
後置if
またこのようなコードは次のように簡潔に書くこともできます。
1
2
num = 0
puts "1です。" if num == 1
この書き方を後置ifと呼びます。
簡単に書けて便利なんですが、非常に長いコードの後にこれを追加すると、かえってわかりづらいコードになってしまうので、使う場所を考えて使用しましょう。
1
2
3
4
5
6
7
8
9
num = 0
puts "ここで指定したnumという変数に0が入っていればこのコードを実行します。ですがそれ以外の時は何も実行しません。" if num == 0
# 上のコードは横にスクロールしないと後置ifに気づかないため、見づらい
num = 0
if num == 0
puts "ここで指定したnumという変数に0が入っていればこのコードを実行します。ですがそれ以外の時は何も実行しません。"
end
# このコードだと条件が非常に確認しやすい
if文を使うときの注意点
if文では条件を何個も追加できますが、上に書いた条件ほど優先して実行されます。
有名なfizzbuzz問題を例にとってみてみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
num = 1
while num < 101 do
if num % 3 == 0
puts "fizz"
elsif num % 5 == 0
puts "buzz"
elsif num % 15 == 0
puts "fizzbuzz"
else
puts num
end
num = num + 1
end
fizzbuzz問題とは1から100までの数字をターミナルに出力し、numが3で割り切れればfizzと、5で割り切れればbuzzと、3でも5でも割り切れれば(つまり15で割り切れれば)fizzbuzzと出力しなさい、それ以外のときはnumに代入されている数字を出力しなさいという、プログラミングでは有名な問題です。
上のコードだとうまく思惑通りの結果になるでしょうか?
実際に確認してみましょう。
おかしいですね、15のところにfizzと出てしまっています。
なぜでしょうか?
fizzと出力されているということは「num % 3 == 0」という条件に当てはまっているからですね。
つまり15という数字は15で割り切れる他にも3でも割り切れるため、最初の条件が適応されたということです。
これをちゃんと15で割り切れるときの条件を出すにはどうしたらよいでしょう?
そうですね、3で割り切れるという条件より上に書いてあげれば優先して実行されそうです。
では実際にやってみましょう。
このようにしっかり15で割り切れる時にはfizzbuzzと表示されるようになりました。
上に書いた条件ほど、優先的に実行されるということを覚えておきましょう。
if文以外の条件分岐で使う制御構文
条件分岐で使う制御構文はif文以外にもあります。
unless文
if文が条件式がtrueの時に実行したのに対し、unless文は条件式がfalseの時に実行する制御構文です。
次のコードの場合は、unlessの条件式がtrueなので実行されず、elseで定義したコードが実行されます。
1
2
3
4
5
6
7
8
9
num = 1
unless num > 0
puts "0より小さいです。"
else
puts "0より大きいです。"
end
0より大きいです。
=> nil
上のコードの場合、なおunless文ではelsifで条件を追加できないので注意しましょう。unless文について詳細は、「unlessの使い方を正しく学ぼう」を参考にしてください。
また if
文を使った条件分岐を考える場合、フローチャートを作成することで整理がしやすくなります。フローチャートを簡単に作成したい場合は、無料で業務効率化ツール(ミロジャパン)がおすすめです。
この記事のまとめ
- if文は、条件によって処理を使い分けたい時に使用する構文のこと
- 論理文を使ってある条件を複数個指定したり、他の条件を組み合わせることが出来る
- 後置ifは、コードをシンプルにしてくれる!