Day12 後半のゴール
Day12 後半では、前半で学んだ try / catch / finally / throw を実際のプログラムに組み込みながら、 「例外処理があるとプログラムがどれほど安全になるのか」を体験していただきます。
扱う題材は次の二つです。
数値入力チェック ファイル読み込みエラー処理
どちらも現実のアプリケーションで頻繁に発生する“エラーが起きやすい処理”であり、 例外処理の重要性を深く理解できる内容になっています。
数値入力チェックを作る
ユーザー入力は必ず失敗する可能性がある
ユーザーが入力する値は、必ずしも正しいとは限りません。 数字を入力してほしい場面でも、文字列や記号が入力されることがあります。
例外処理を使うことで、入力ミスがあってもプログラムを止めずに安全に処理できます。
try-catch を使った数値入力チェックの基本形
Console.Write("数値を入力してください:");
string input = Console.ReadLine();
try
{
int number = int.Parse(input);
Console.WriteLine("入力された数値: " + number);
}
catch (FormatException)
{
Console.WriteLine("数値として認識できませんでした");
}
C#深掘りポイント
int.Parse は「数値に変換できない文字列」を渡すと例外を投げます。 そのため、try-catch で囲むことで安全に扱えます。
また、catch の型を FormatException にすることで、 「どんな種類のエラーを捕まえるか」を明確にできます。
finally を使って後処理を追加する
try
{
int number = int.Parse(input);
Console.WriteLine("入力された数値: " + number);
}
catch
{
Console.WriteLine("数値として認識できませんでした");
}
finally
{
Console.WriteLine("入力処理を終了します");
}
C#深掘りポイント
finally は「エラーが起きても起きなくても必ず実行される」ため、 ログを残す 画面をクリアする リソースを解放する
など、後処理を確実に行いたい場面で非常に重要です。
throw を使って独自のエラーを作る(応用)
入力値がマイナスならエラーにする例
try
{
int number = int.Parse(input);
if (number < 0)
{
throw new Exception("0以上の数値を入力してください");
}
Console.WriteLine("入力された数値: " + number);
}
catch (Exception ex)
{
Console.WriteLine("エラー: " + ex.Message);
}
C#深掘りポイント
throw を使うことで「自分でエラーを作る」ことができます。 入力チェックや業務ルールの違反を検出する場面で非常に役立ちます。
数値入力チェックの完成形
Console.Write("数値を入力してください:");
string input = Console.ReadLine();
try
{
int number = int.Parse(input);
if (number < 0)
{
throw new Exception("0以上の数値を入力してください");
}
Console.WriteLine("入力された数値: " + number);
}
catch (FormatException)
{
Console.WriteLine("数値として認識できませんでした");
}
catch (Exception ex)
{
Console.WriteLine("エラー: " + ex.Message);
}
finally
{
Console.WriteLine("入力処理を終了します");
}
C#完成のポイント
FormatException と Exception を分けることで、 「変換エラー」と「業務ルール違反」を区別して処理できます。
ファイル読み込みエラー処理を作る
ファイル操作は例外が発生しやすい
ファイル読み込みは、次のような理由で失敗することがあります。
ファイルが存在しない 権限がない 他のアプリが使用中 ファイルが壊れている
そのため、例外処理は必須です。
try-catch を使ったファイル読み込みの基本形
try
{
string text = File.ReadAllText("data.txt");
Console.WriteLine(text);
}
catch (FileNotFoundException)
{
Console.WriteLine("ファイルが見つかりません");
}
catch (Exception ex)
{
Console.WriteLine("ファイルを読み込めませんでした");
Console.WriteLine("詳細: " + ex.Message);
}
C#深掘りポイント
FileNotFoundException を個別に扱うことで、 「ファイルがない場合だけ特別なメッセージを出す」ことができます。
例外の種類を分けて処理することは、実務で非常に重要です。
finally を使って後処理を追加する
try
{
string text = File.ReadAllText("data.txt");
Console.WriteLine(text);
}
catch
{
Console.WriteLine("ファイルを読み込めませんでした");
}
finally
{
Console.WriteLine("ファイル処理を終了します");
}
C#深掘りポイント
finally は「後片付け」を確実に行うための場所です。 ファイルを閉じる処理などを入れることが多いです。
ファイル読み込みエラー処理の完成形
try
{
string text = File.ReadAllText("data.txt");
Console.WriteLine(text);
}
catch (FileNotFoundException)
{
Console.WriteLine("ファイルが存在しません");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("ファイルにアクセスする権限がありません");
}
catch (Exception ex)
{
Console.WriteLine("予期しないエラーが発生しました");
Console.WriteLine("詳細: " + ex.Message);
}
finally
{
Console.WriteLine("ファイル処理を終了します");
}
C#完成のポイント
例外の種類ごとに catch を分けることで、 ユーザーにとってわかりやすいエラー表示ができます。
Day12 後半のまとめ
Day12 後半では、例外処理を使った実用的なプログラムを作りました。
数値入力チェック → FormatException / throw / finally ファイル読み込みエラー処理 → FileNotFoundException / UnauthorizedAccessException
例外処理は「プログラムを止めずに安全に動かす」ための最重要機能です。
