フォールトトレラント設計 のための try..catch 節

JavaScript のランタイムエラーは、起こると処理がそこで停止してしまう。たとえば

initModuleA();//エラーが起こる可能性のあるモジュール
initModuleB();
initModuleC();
alert("done");

このコードで initModuleA でエラーが起こると、以降、initModuleB と initModuleC、alert は実行されない。 moduleA が完全に独立していて、障害が致命的でないならば、moduleA を切り離してでも処理を続けさせるのが、フォールトトレラントなシステムと言える。

そこで、try..catch 節を使う。

try {
initModuleA();
} catch(e) {
showError(e);
}
initModuleB();
initModuleC();
alert("done");

これで、alert まで処理が続く。

怠け者の try..catch

HTML ページ A、B、C があるとする。それらのページの共通モジュールもあれば、一部のページでしか使用されないモジュールもあるとする。 そのような状態で、各ページに全モジュールを初期化するコードが書かれている場合、

function initModules() {
try {
initModuleX();
} catch(e) {}
try {
initModuleY();
} catch(e) {}
try {
initModuleY();
} catch(e) {}
}

全ての初期化コードを try..catch 節で囲めば、仮にページ C に moduleX に必要な要素が存在しなくとも、処理は続けられる。

catch するつもりがない try..catch 節のことを、"怠け者の try..catch" と自分は呼んでいる。便利なのでつい書いてしまうが。