[Xamarin.Forms] ButtonのTipsを公開しました

HIRO’s.NETのサイトにXamarin.FormsのButton Tipsを公開しました。

01.Buttonにテキストを表示するには?
02.Buttonのクリックイベントを使用するには?
03.Buttonに枠線を表示するには?
04.Buttonの枠線の色を変更するには?
05.Buttonの角の半径を変更するには?
06.Buttonの背景色を変更するには?
07.Buttonのテキストの色を変更するには?
08.Buttonを無効にするには?
09.Buttonに画像を表示するには?
10.コマンドインターフェースを使用してButtonをタップするには?

[C#入門]第16回 例外処理(2) 例外のスロー

はじめに

前回は 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
    }
}

[C#入門]第15回 例外処理(1) try〜catch〜finally文

はじめに

例外とは、プログラム中で予期せず発生するエラーのことをいいます。

今回は、この例外を対処する方法について説明します。

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("ゼロによる除算をしました。")
}