16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby初心者必見】知らないとヤバい!? return・break・next の違いをサクッと理解!

Posted at

はじめに

弊社の採用フローの中には技術面接が含まれています。
その時に、Ruby でループ処理やメソッドの中に登場する returnbreaknextについて質問をいただいたので、記事にもまとめておきます。

この記事では、それぞれの違いを簡潔にまとめ、サンプルコードとともに解説していきます。

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
# 2
  • num == 3break が呼び出されると、その瞬間にループ処理自体が終了。
  • 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
# 5
  • num == 3 のタイミングだけ処理を飛ばし、ループはそのまま続行。

注意点

  • 中断ではなく「飛ばす」 だけなので、ループ自体は終わらせたくないが、特定条件時の処理だけパスしたいときに使います。

まとめ

キーワード 主な使い所 動作 使われるシーン
return メソッド・ブロック メソッド/ブロックの処理を打ち切り値を返す メソッドの処理結果を返す、ブロック内の処理を終了する
break ループ全般 ループ自体を抜ける 繰り返しを完全に打ち切りたい
next ループ全般 その繰り返し回をスキップし次の繰り返しへ進む 特定条件のときだけ処理を飛ばし、ループは続行させたい
  • return: メソッドごと抜ける
  • break: ループ処理から抜ける
  • next: ループ処理の「その回」をスキップする

最後に

return, next, break の違いをまとめましたが、実務でももちろん使うものです。
必ず復習して理解しておくようにしましょう!

16
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?