例外処理の基本
知識課題
知識課題1
try/catch/finallyおよびthrowの各用語を用いて、例外処理の基本的な仕組みと流れを説明してください。throw文を使用して、独自のエラーを発生させる方法について、簡単なコード例を交えて説明してください。- どのようなケースで例外を投げ(throw)、どのようなケースではif文などの条件分岐のみでエラーをハンドリングできるのか、その考察とまとめを行ってください。
知識課題2
Errorオブジェクトの役割、およびそのプロパティであるname/message/causeについて解説してください。- ルトインエラーである
ReferenceError/TypeError/SyntaxErrorが発生する状況を、具体例を挙げながら説明してください。
実践課題
ユーザーから2つの数値(割られる数と割る数)を入力として受け取り、割り算の結果を出力するプログラムを作成します。以下の条件に従って実装してください。
実装条件
- 入力の検証
- コマンドライン引数(
process.argv)を用いて、2つの数値を受け取る。 - 入力値が数値でない場合は、
throw文を使用してエラーを発生させる。
- コマンドライン引数(
- 割り算処理
- 割る数が
0の場合、割り算ができないため、throw文でエラーを発生させる。 - 正常な場合は、計算結果を出力する。
- 割る数が
- エラーハンドリング
tryブロック内で割り算処理を実装し、catchブロックでエラーを捕捉、エラーメッセージとErrorオブジェクトのname/messageプロパティを表示する。finallyブロックで必ず「処理終了」というメッセージを出力する。
解答
js
// 数値かどうかのチェック関数
function checkNumber(value) {
const num = Number(value);
if (isNaN(num)) {
// 入力が数値でない場合、エラーをスローする
throw new Error(`Invalid number: ${value}`);
}
return num;
}
try {
// コマンドライン引数から値を取得(例: node calc.js 10 2)
const args = process.argv.slice(2);
if (args.length < 2) {
throw new Error("2つの数値を入力してください");
}
const dividend = checkNumber(args[0]);
const divisor = checkNumber(args[1]);
if (divisor === 0) {
// 0での割り算はエラーとする
throw new Error("0で割ることはできません");
}
// 割り算の実施
const result = dividend / divisor;
console.log(`結果: ${result}`);
} catch (error) {
// エラーハンドリング:エラー情報を出力する
console.error(`エラー [${error.name}]: ${error.message}`);
} finally {
// 最後に必ず実行される処理
console.log("処理終了");
}