はじめに
例外とは、プログラム中で予期せず発生するエラーのことをいいます。
今回は、この例外を対処する方法について説明します。
Try〜Catch〜Finally文
数値を0では割ることができないので、このような処理をした場合は例外が発生します。
このままではプログラムが停止してしまいますので、Try〜Catch〜Finallyを使用して例外に対する処理を行います。
C#におけるtry〜catch〜finally
try〜catch〜finallyの構文を以下に示します。
例外が発生する可能性があるコードはtryの{}に書き、例外発生時の対応処理はcatch の{}に書きます。また、例外発生の有無に関係なく実行したい処理がある場合はfinally の{}に書きます。
なおtry句は必須ですが、catchとfinallyはどちらか一方のみにすることができます。
try { // 例外が発生する可能性のあるコード } catch (例外の種類) { // 例外処理 } finally { // 例外発生の有無に関係なく実行したい処理 }
以下にtry〜catch〜finallyの使用例を示します。この例ではtry句で割り算を行っています。コンソールから入力された値がゼロの場合は例外が発生します。例外が発生すると「ゼロによる除算を行いました」を表示します。また、最後にfinallyで「計算が終了しました」を表示します。
try { var x = Console.ReadLine(); var ans = 5 / int.Parse(x); } catch (Exception) { Console.WriteLine("ゼロによる除算をしました。"); } finally { Console.WriteLine("計算が終了しました。"); }
VB.NETにおけるtry〜catch〜finally
VB.NETにおけるtry〜catch〜finallyは以下の書式を使用します。
Try '例外が発生する可能性のあるコード Catch 例外の種類 '例外処理 Finally '例外発生の有無に関係なく実行したい処理 End Try
C#でのサンプルをVB.NETに書き直した例を以下に示します
Try Dim x = Console.ReadLine() Dim ans = 5 / Integer.Parse(x) Catch ex As Exception Console.WriteLine("ゼロによる除算をしました。") Finally Console.WriteLine("計算が終了しました。") End Try
Javaにおけるtry〜catch〜finally
Javaにおけるtry〜catch〜finallyの構文はC#と同様です。
try { // 例外が発生する可能性のあるコード } catch (例外の種類) { // 例外処理 } finally { // 例外発生の有無に関係なく実行したい処理 }
C#で示した例をJavaで書き直した例を以下に示します。
try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String x = reader.readLine(); int ans = 5 / Integer.parseInt(x); } catch (Exception e) { System.out.println("例外が発生しました。"); } finally { System.out.println("計算が終了しました。"); }
Swiftにおけるtry〜catch〜finally
Swiftにおけるtry〜catch〜finallyは以下の書式を使用します。
doの中で例外が発生するコードを記述するのですが、例外が発生する処理(関数)を呼び出す際は、先頭にtryを付けます。
例外処理は他の言語と同様にcatch {}に記述します。
do { try 例外が発生する可能性の関数 } catch { // 例外処理 }
C#で示した例をSwiftで書き直した例を以下に示します。
warizanという関数の中で、引数xが0の場合に例外をスローしています。よって、tryの中でwarizanを呼び出すと、引数の値が0のときに例外が発生し、catchが実行されます。
enum MyErrors: Error { case DividedByZero } // 割り算をする関数 func warizan(x : Int) throws -> Int { if x == 0 { throw MyErrors.DividedByZero } return 5 / x } do { let x = 0 try warizan(x: x) } catch { print("ゼロによる除算をしました。") }
コメント