【エンジニアブログvo.12】Ruby初心者必見|知らないとヤバい!? return・break・next の違いをサクッと理解!
はじめに
弊社には年間100人程度の実務未経験の方に応募いただき、技術面接を実施しております。
その時に、Ruby でループ処理やメソッドの中に登場する return、break、nextについて質問をいただいたので、記事にもまとめておきます。
この記事では、それぞれの違いを簡潔にまとめ、サンプルコードとともに解説していきます。
return, next, break の違い
return
return は メソッドやブロックから抜け出す(処理を終わらせる) ときに使います。
def greet(name)
return "Hello, NoName..." if name.empty?
"Hello, #{name}!"
end
puts greet("") # => "Hello, NoName..."
puts greet("Taro") # => "Hello, Taro!"
- 空文字が与えらた時に処理終了&値を返す
- それ以外の場合は
"Hello, #{name}!"が返される
注意点
- ループ処理の中で
returnを使うと、ループだけでなくメソッドごと抜けて しまいます。
def method_with_return
[1, 2, 3, 4, 5].each do |num|
if num == 3
return "return が呼ばれたのでメソッドごと抜けます"
end
puts "method_with_return: #{num}"
end
"ここには到達しません"
end
puts "method_with_return の結果 => #{method_with_return}"
# 実行結果:
# method_with_return: 1
# method_with_return: 2
# method_with_return の結果 => return が呼ばれたのでメソッドごと抜けます
# 4,5も"ここには到達しません"も出力されません。
break の使い方
break は 現在のループ処理を途中で抜ける ときに使います。
numbers = [1, 2, 3, 4, 5]
numbers.each do |num|
if num == 3
break # ここでループそのものを終了
end
puts num
end
# 実行結果:
# 1
# 2num == 3でbreakが呼び出されると、その瞬間にループ処理自体が終了。4,5は出力されない。
注意点
breakに引数を渡すと、「反復メソッドの戻り値」 となります。result = [1, 2, 3].each do |num|
break "Stopped!" if num == 2
puts num
end
puts result # => "Stopped!"- 2 重ループ以上の場合、
breakは 書かれたループを抜けるだけ なので、深い階層を一気に抜けたいときはフラグ変数やthrow/catchを検討しましょう。
next の使い方
next は 現在のイテレーション(繰り返し回)をスキップ して、次の繰り返しへ進みたいときに使います。
numbers = [1, 2, 3, 4, 5]
numbers.each do |num|
if num == 3
next # この回だけ処理をスキップ
end
puts num
end
# 実行結果:
# 1
# 2
# 4
# 5num == 3のタイミングだけ処理を飛ばし、ループはそのまま続行。
注意点
- 中断ではなく「飛ばす」 だけなので、ループ自体は終わらせたくないが、特定条件時の処理だけパスしたいときに使います。
まとめ
return: メソッドごと抜けるbreak: ループ処理から抜けるnext: ループ処理の「その回」をスキップする
最後に
return, next, break の違いをまとめましたが、実務でももちろん使うものです。
必ず復習して理解しておくようにしましょう!