簡単な診断:例外とガードチェック
想定される無効な入力にはガードチェックを適用し、例外的な状態には例外をスローします。try/catchでエラーを適切に処理します。
「簡単な診断:例外とガードチェック」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
診断の概要
目標:想定される問題にはガードチェックを使用し、稀で重大な問題には例外を使用します。
ガードチェックの例
ガードチェックは、一般的な無効な入力に対して例外をスローせず、ステータスを返します。
using System;
public class Program
{
public static bool TryDivide(int a, int b, out int result)
{
if (b == 0)
{
result = 0;
return false; // guard check fails
}
result = a / b;
return true;
}
public static void Main(string[] args)
{
int r;
bool ok = TryDivide(10, 0, out r);
Console.WriteLine("ok=" + ok + " result=" + r);
}
}
例外の例
例外は処理されない限り実行を停止します。予期しない状態や重大な状態に使用します。
using System;
public class Program
{
public static int PriceWithTax(int price, int ratePercent)
{
if (price < 0)
{
throw new ArgumentOutOfRangeException("price");
}
if (ratePercent < 0 || ratePercent > 100)
{
throw new ArgumentOutOfRangeException("ratePercent");
}
return price + (price * ratePercent / 100);
}
public static void Main(string[] args)
{
try
{
int total = PriceWithTax(100, 20);
Console.WriteLine("Total=" + total);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
}
チェックと例外の組み合わせ
アプローチを組み合わせます。通常の検証にはガードチェックを使用し、不正な状態には例外を使用します。
using System;
public class Program
{
public static bool TryParsePrice(string text, out int value)
{
return int.TryParse(text, out value); // guard check
}
public static int GetDiscount(int code)
{
if (code < 0) throw new ArgumentException("Invalid code"); // exception
return 10;
}
public static void Main(string[] args)
{
int v;
if (TryParsePrice("123", out v))
{
Console.WriteLine("Parsed " + v);
}
try
{
int d = GetDiscount(-1);
Console.WriteLine("Discount=" + d);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
}
}
try/catch の例
try/catchを使用して例外を処理し、プログラムの実行を継続します。
using System;
public class Program
{
public static void Main(string[] args)
{
try
{
int x = 10;
int y = 0;
int z = x / y; // will throw DivideByZeroException
Console.WriteLine(z);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
}
}
ヒント
ヒント:
- 一般的なケースでは、ガードチェックによって安全なデフォルト値を返します。
- 例外はまれに発生し、意味のあるものであるべきです。
- 処理できる例外だけを捕捉します。
ガードチェックと例外
まとめ
まとめ:一般的な無効な入力にはガードチェックを使用し、例外的な状態には例外をスローします。復旧できる場合は、try/catch で処理します。
よくある質問
「簡単な診断:例外とガードチェック」レッスンは無料ですか?
はい。「簡単な診断:例外とガードチェック」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「簡単な診断:例外とガードチェック」で何を学びますか?
想定される無効な入力にはガードチェックを適用し、例外的な状態には例外をスローします。try/catchでエラーを適切に処理します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「簡単な診断:例外とガードチェック」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- if/else、switch(従来型)、ループ:for、while、do、foreach
- break/continue、goto(使用を避ける)、スコープ、例外とガードチェック
- 簡単な診断:例外とガードチェック