例外処理 | 作成日:2013-01-26 最終更新日: |
オライリーの JavaScript 第6版を図書館から借りて、 いろいろ調べている。 次に5章の例外処理は知らないので、少し調べてみた。 入力した数が自然数ならばその階乗を計算し、自然数以外ならば例外を投げるというものである。
階乗の計算:
当初のコードは次の通りだった。これでは、負の数以外の例外を捕まえていない。
function calculate() {
try {
var n = Number(prompt("正の整数を入力してください", ""));
var f = factorial(n);
alert(n + "!= " + f);
}
catch(ex) {
alert(ex);
}
}
function factorial(x) {
if (x <= 0) throw new Error("x は負では計算できません");
for (var f = 1; x > 1; f *= x, x--) {
// do nothing
}
return f;
}
これを例外を捉えるように変更しなければならない。 たとえば、数値でないときには Number は NaN を返してくるのだから、 それも例外に取り込み、指定しなければならない。 また、たとえば、文字列が空のとき、小数になっているときも処理しなければならない。 そうすると、たとえば、例外を投げるところは次のよう行を使いしなければならないだろう。
if (isNaN(x)) throw new Error("x は自然数でなければなりません");
if (x <= 0) throw new Error("x は負では計算できません");
if (String(x).indexOf(".") >= 0) throw new Error("x は小数では計算できません");
階乗の概念を拡張したガンマ関数を使えば、正負の小数、また複素数も扱える。 ただし、0 を含む実数軸上の負の整数には定義できない。
まりんきょ学問所 > JavaScript 手習い > 例外処理