プログラミング 条件分岐について

case文

case文とは、条件分岐を表現するための文法です。複数の条件を指定する時に、if文のelsifを重ねるよりもシンプルにコードを書くことができます。

並列する条件が多数ある場合は、if文よりもcase文を使った方がコードとして読みやすくなります。

case文の構文は以下の通りです。

case 対象のオブジェクトや式
when 値1
# 値1に一致する場合に実行する処理
when 値2
# 値2に一致する場合に実行する処理
when 値3
# 値3に一致する場合に実行する処理
else
# どれにも一致しない場合に実行する処理
end

 

if文と比較しながらcase文のコードを見てみましょう。

例えば以下のようなコードがあったとします。まずはif文からです。

例 if文

country = "Japan"

if country == "Japan"
puts "こんにちは"
elsif country == "America"
puts "Hello"
elsif country == "France"
puts "Bonjour"
elsif country == "China"
puts "你好"
elsif country == "Italy"
puts "Buon giorno"
elsif country == "Germany"
puts "Guten Tag"
else
puts "..."
end

 

case文

country = "Japan"

case country
when "Japan"
puts "こんにちは"
when "America"
puts "Hello"
when "France"
puts "Bonjour"
when "China"
puts "你好"
when "Italy"
puts "Buon giorno"
when "Germany"
puts "Guten Tag"
else
puts "..."
end

上記では、case countryの部分が条件の対象となります。そして、whenで指定した値とcountryの中身が一致するかで条件を判定しています。

if文と比べると記述がシンプルになっていることが確認できます。このように並列する条件が多数ある場合は、case文を使うことを検討しましょう。

 

繰り返し処理

次に繰り返し処理について学びましょう。

繰り返し処理で思い浮かぶのはeachメソッドではないでしょうか。eachメソッドは、配列に対して使うことができるメソッドでした。

Rubyでは他にも繰り返し処理用の構文が用意されています。

Rubyの繰り返し処理用の構文の中の1つがwhile文です。

繰り返し処理を行うためのRubyの構文です。指定した条件が真である間、処理を繰り返します。

while文の構文は以下の通りです。

【例】

while 条件式
# 条件が真である時に繰り返す処理
end

具体例

number = 0

while number <= 10
puts number
number += 1
end

# ターミナル出力結果
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10

上記のコードでは、一番初めに変数numberに0を代入しています。そしてwhile number <= 10の部分では、条件を判定しています。

当然、条件は0 <= 10で真になるので、puts numberで0が出力されます。number += 1では、変数numberに1を加えています。

endまで行ったらwhile文は繰り返し処理を行うかどうかの判定を行ないます。先ほど変数numberの値は1になったので、条件は1 <= 10で真になりますね。

したがって、再度while文の中の処理を実行します。これを条件が偽になるまで繰り返します。結果的にターミナルには0から10までの連番が出力されます。

 

無限ループについて学ぼう

繰り返し処理を実装する際に、覚えておきたい概念として「無限ループ」があります。もしかしたら、みなさんも日常会話で聞いたことがあるかもしれません。

この無限ループという言葉は、元はプログラム上で使われていた用語です。改めて説明するまでもないですが、無限ループとは「処理が永遠に繰り返されること」を指します。

ここでは無限ループを2つのサンプルコードで紹介します。

まずは1つめです。先ほどのコードを再掲します。

【例】

number = 0

while number <= 10
puts number
number += 1
end

 

例えば上記のコードからnumber += 1の部分を削除したらどうなるでしょうか?

number変数の値は常に0のままなので、while number <= 10の判定は常に真となり、無限に0がターミナルに出力されます。

これが無限ループです。

では2つめです。上記のコードを少し編集しました。

【例】

number = 0

while true
puts number
number += 1
end

# ターミナル出力結果
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# .
# .
# .

while trueの部分に着目してください。while文ではwhileの右の式を判定し、最終的に真偽値(true/false)に変換して繰り返すかどうかを決めます。

上記のコードは、この特性を利用し、条件式の部分にはじめからtrueと書くことによって意図的に無限ループを発生させているのです。

ここまで2つの例で無限ループを学びました。

無限ループはコンピュータに大きな負荷をかけてしまうので、繰り返し処理を実装する場合は特に注意が必要です。

 

ループから抜け出す方法を学ぼう

最後にループから抜け出す方法について学びましょう。

自分で設定したループからわざわざ抜け出す必要なんてあるのかと疑問に思われるかもしれませんが、ある特定の条件になったらループから抜け出すという処理はよく使います。

今回はその基本を学びましょう。ループから抜け出すにはbreakを使います。

break
breakは、eachメソッドやwhile文などのループから脱出するために使われます。

具体例を見てみましょう。

先ほどのコードを再掲します。

【例】

number = 0

while number <= 10
puts number
number += 1
end

実行結果が0〜10までの連番になることは解説しました。では上記のコードを一部編集します。以下を見てください。

【例】

number = 0

while number <= 10
if number == 5
break
end
puts number
number += 1
end

# ターミナル出力結果
# 0
# 1
# 2
# 3
# 4

上記のコードでは、if文を追加しています。そしてnumber変数の値が5だったときにbreakを実行しています。

すると、実行結果を見てもわかる通り、出力結果は4で止まっています。

つまり、number変数の値が5の時にif文内のbreakが実行され、ループから抜け出していることが確認できます。

このようにif文などの条件分岐とbreakを使うと、特定の条件のときにループを脱出することができます。

実際の現場ではもっと複雑な条件が使われます。今回は仕組みを理解するためにシンプルなコードで解説しました。