はじめに
前回は try〜catch〜finallyを使用して、例外を対処する基本的な方法について説明しました。
今回は、例外を発生させる側について説明をします。
例外をスローする
例外は、プログラムの中でエラーが発生したことを示すものです。
例外は故意に発生させることができ、このことを例外をスローするといいます。
例えば、自作メソッドの中でエラーが発生した場合に例外をスローするように作成しておけば、呼び出し元はtry〜catch〜finallyを使用して対処できるようになります。
以下に。各言語での例外のスロー方法を示します。
C#における例外のスロー
C#で例外をスローするには以下の書式を使用します。
throw 例外クラスのインスタンス
以下は、DoSomethingというメソッドを定義し、引数にnullが与えられた場合は例外を発生するというものです。
例外が発生した場合は、以降の処理を中断して呼び出し元に戻ります。よってこの例では、4行目のthrow文を実行すると呼び出し元に戻りますので、7行目は実行されません。
static void DoSomething(Sample x)
{
if (x == null) {
throw new Exception("引数が null です。");
}
Console.WriteLine("DoSomethingの実行");
}
VB.NETにおける例外のスロー
VB.NETにおけるthrow文は以下の書式を使用します。
Throw 例外クラスのインスタンス
C#でのサンプルをVB.NETに書き直した例を以下に示します。
Sub DoSomething(x As Sample)
If x Is Nothing Then
Throw New Exception("引数が null です。")
End If
Console.WriteLine("DoSomethingの実行")
End Sub
Javaにおける例外のスロー
JavaはC#と同様の書式で例外をスローすることができます。
throw 例外クラスのインスタンス
ただし、自身のメソッド内でcatchせずに、呼び出し元でcatchをしたい場合は、メソッドが例外を投げることを示す必要があります。この場合は、以下の書式に示すようにメソッドの後ろに「 throws 例外の種類」を記述します。なお、例外を投げる可能性のあるメソッドを使用するする場合は try〜catch文が必要となります。
// 例外を投げる可能性のあるメソッドの定義書式
戻り値の型 メソッド名(引数リスト) throws 例外の種類 {
// 処理
}
C#でのサンプルをJavaに書き直した例を以下に示します。
static void DoSomething(Sample x) throws Exception
{
if (x == null) {
throw new Exception("引数が null です。");
}
System.out.println("DoSomethingの実行");
}
Swiftにおける例外のスロー
Swiftの場合は、以下の書式で例外をスローすることができます。
throw 例外の種類
Javaと同様に、例外を投げる可能性があるメソッドは、メソッドの後ろに「 throws 例外の種類」を記述します。なお、このメソッドを使用するする場合は try〜catch文が必要となります。
func メソッド名(引数リスト) throws -> 戻り値の型 {
// 処理
}
C#でのサンプルをSwiftに書き直した例を以下に示します。
enum MyError : Error {
case somthing
case unknown
}
func DoSomething(x : Sample) throws {
if x == nil {
throw MyError.unknown
}
}
コメント