{category}

Ruby - 例外の捕捉と発生

catch

キャッチ(例外処理

意味 スコープを越えた大域脱出


catchとは?

catchは、throwと組み合わせて使用する制御構造です。特定の条件下でプログラムの実行を中断し、指定したcatchブロックまで処理を移動させる(大域脱出する)ために使用します。例外処理とは異なり、エラー状態を表すものではありません。

catchの具体的な使い方

catchとthrowを使用した制御フロー

def find_even(numbers)
  catch(:found) do
    numbers.each do |num|
      throw :found, num if num.even?
    end
    nil  # 偶数が見つからなかった場合
  end
end

numbers = [1, 3, 5, 8, 11, 13]
result = find_even(numbers)

if result
  puts "最初に見つかった偶数: #{result}"
else
  puts "偶数は見つかりませんでした"
end

👇出力結果

最初に見つかった偶数: 8

この例では、catchとthrowを使用して配列内の最初の偶数を見つけます。偶数が見つかるとthrowで即座にcatchブロックを抜け、その値を返します。これにより、配列全体を走査せずに済み、効率的に処理を終了できます。

ネストしたループからの脱出

def find_target(matrix, target)
  catch(:found) do
    matrix.each_with_index do |row, i|
      row.each_with_index do |element, j|
        if element == target
          throw :found, [i, j]
        end
      end
    end
    nil  # targetが見つからなかった場合
  end
end

matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

result = find_target(matrix, 5)

if result
  puts "ターゲット5の位置: 行#{result[0] + 1}, 列#{result[1] + 1}"
else
  puts "ターゲットは見つかりませんでした"
end

👇出力結果

ターゲット5の位置: 行2, 列2

この例では、2次元配列(マトリックス)内で特定の値を検索し、その位置を返します。catchとthrowを使用することで、ネストしたループから簡単に脱出でき、目的の値が見つかった時点で処理を終了できます。

catchに関するよくある質問

Q. catchとthrowの基本的な使い方は?
A. catchは特定のシンボルと共に使用され、そのシンボルに対応するthrowが実行されるとcatchブロックの実行を終了します。throwは指定されたシンボルとオプションの値を「投げる」ために使用されます。
Q. catchとrescueの違いは?
A. catchとthrowは制御フローを管理するために使用され、必ずしもエラー状態を示しません。一方、rescueは例外処理に使用され、エラーが発生した際にプログラムの実行を継続するために使われます。
Q. catchで複数のシンボルを扱えますか?
A. いいえ、1つのcatchブロックで扱えるシンボルは1つだけです。複数のシンボルを扱いたい場合は、ネストしたcatchブロックを使用する必要があります。
Q. throwされた値を取得できますか?
A. はい、catchブロックの戻り値としてthrowされた値を取得できます。例: result = catch(:symbol) { throw :symbol, 42 }; puts result # 42

catchが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Rubyのcatchやclass CustomError < StandardError、begin、raise、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


Rubyを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!Rubyはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

class CustomError < StandardError

独自の例外クラスを定義

種類: カスタム例外

begin

例外処理の開始

種類: 例外の基本

raise

意図的に例外を発生させる

種類: 例外の捕捉と発生

rbenv

軽量なRubyバージョン管理

種類: バージョン管理

step

範囲を指定間隔で繰り返し

種類: Range操作