'try-catch' ブロック
CoddyのDartジャーニー「論理とフロー」セクションの一部 — レッスン 39/65。
例外とは何かを理解したところで、try-catch ブロックを使用して、それらを適切に処理する方法を学びましょう。これは、何か問題が発生したときにプログラムがクラッシュするのを防ぐための基本的なツールです。
try-catchブロックは、問題が発生する可能性のあるコードをtryセクションで囲むことで機能します。例外が発生した場合、プログラムをクラッシュさせる代わりに、Dartは即座にcatchセクションにジャンプし、そこでエラーを適切に処理できます。
try {
// 例外が発生する可能性のあるコード
int number = int.parse("abc");
} catch (e) {
// 例外が発生した場合に実行されるコード
print("Something went wrong: $e");
}この例では、文字列 "abc" を整数に変換しようとすると、通常はプログラムがクラッシュします。しかし、try ブロックで囲まれているため、代わりに例外がキャッチされ、catch ブロックで処理されます。変数 e には何が問題だったのかに関する情報が含まれています。
このアプローチにより、予期しない状況が発生した場合でもプログラムの実行を継続できるようになり、コードの堅牢性とユーザーフレンドリーさが大幅に向上します。
チャレンジ
簡単try-catch ブロックを使用して、ユーザーが入力した文字列を安全に数値に変換するプログラムを作成してください。プログラムは、入力が有効な数値ではない場合を処理し、プログラムがクラッシュするのを防ぐ必要があります。
- 整数に変換する必要がある数値を表す文字列入力を読み取ります
try-catchブロックを使用して、int.parse()による変換を安全に試行します- 変換に成功した場合は、その数値の2乗を計算します(その数値自体を掛けます)
- 変換に失敗して例外が発生した場合は、エラーを適切に処理します
- 適切な結果またはエラーメッセージを、以下に示す正確な形式で表示します
例えば、入力が "5" の場合、プログラムは次のように出力する必要があります:
Processing input: 5
Conversion successful!
The square of 5 is: 25入力が "abc" の場合、プログラムは次のように出力する必要があります:
Processing input: abc
Error: Cannot convert 'abc' to a number
Please enter a valid integer入力が "12" の場合、プログラムは次のように出力する必要があります:
Processing input: 12
Conversion successful!
The square of 12 is: 144プログラムでは、int.parse() 操作をラップするために try-catch ブロックを使用する必要があります。try セクションでは、入力文字列を整数に変換し、その2乗を計算することを試みます。catch セクションでは、変換中に発生した例外を処理し、適切なエラーメッセージを表示します。プログラムは、変換が成功するか失敗するかに関わらず、正常に実行を継続する必要があります。
チートシート
例外を適切に処理し、プログラムのクラッシュを防ぐために、try-catch ブロックを使用します。
try {
// 例外が発生する可能性のあるコード
int number = int.parse("abc");
} catch (e) {
// 例外が発生した場合に実行されるコード
print("Something went wrong: $e");
}try ブロックには問題が発生する可能性のあるコードが含まれ、catch ブロックは発生した例外を処理します。変数 e には例外に関する情報が含まれています。
自分で試してみよう
import 'dart:io';
void main() {
// 入力文字列を読み込む
String? input = stdin.readLineSync();
// 処理メッセージを表示
print('Processing input: $input');
// TODO: 以下にコードを記述してください
// try-catchブロックを使用して、入力を安全に整数に変換します
// 変換に成功した場合は、その2乗を計算します
// 変換中に発生した例外を処理します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
1リスト操作の応用
リストのプロパティ: first と lastリストの状態: isEmpty と isNotEmptyリストの反転リストへの追加: insertリストの削除: removeWhereリスト内の検索: indexOfリストのソートリストのシャッフルまとめ - リストオーガナイザー