イベント周りでtypoして発火したイベントと待ち受けているイベントが異なって失敗するなどを防ぎたい。
例えば
- 発火したイベント: newItem
- 待ち受けていたイベント: newItme
という感じでtypoによってイベントが上手く伝搬していかないなどがあると悲しい。
他の言語とは異なり、jsのobjectでは保持していないkeyでアクセスしてもundefinedが返ってくるだけでエラーにならない。
そしてundefinedが値として使われたまま処理が継続され、実際のtypoした場所と異なるところでエラーになるというのが辛い。
strict
というすごく単純な関数を定義して使ってみているのだけれど、意外と役に立っている。
function strict(name){
if(!name){
throw new Error('invalid name');
}
return name;
}
以下の様にして使う。
var events = {
createItem: "*createItem",
removeItem: "*removeItem",
updateItem: "*updateItem"
};
strict(events.createItme) // => invalid name
undefinedが渡された際にエラーになる関数に渡している。そこで存在しないkeyでアクセスした場合にエラーになる。
new Error
をしっかり書いておくと、エラー時にスタックトレースを出力してくれるので最悪どこでtypoしていたか分かる。
(下記はnode.jsでの例。ブラウザでも同様。)
/private/tmp/a.js:3
throw new Error('invalid name');
^
Error: invalid name
at strict (/private/tmp/a.js:3:11)
at Object.<anonymous> (/private/tmp/a.js:13:1)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
もっと良い方法があったら知りたい所