一つの記事にできるほどでもない JavaScript の小技二つの紹介です。
一つ目は JavaScript で throw 式を作る方法です。本来 JavaScript の throw は文であり、次の様に使います。
// JavaScript として問題がないパターン
function abs(a){
if(typeof a !== 'number' || Number.isNaN(a)) {
throw new Error('a は数値である必要があります。');
}
return Math.abs(a);
}
// JavaScript としてエラーが起きるパターン
function abs(a){
return (typeof a === 'number' && !Number.isNaN(a))
? Math.abs(a)
: throw new Error('a は数値である必要があります。');
}
エラーが起きるパターンでは三項演算子の中に組み込むのは式である必要があるのに、それを無視して throw を記述しているためエラーが起きます。こういった書き方をしたい時、throw 式があると便利です。その throw 式の作り方が次です。
// throw だけの関数を用意します
const throwExpression = (err) => {
throw err;
};
function abs(a){
return (typeof a === 'number' && !Number.isNaN(a))
? Math.abs(a)
// 関数の呼び出しは式なので構文エラーになりません
: throwExpression(new Error('a は数値である必要があります。'));
}
これだという使い道はあまりありませんが、こんな感じで throw 式的なものを作れます。
二つ目は setInterval で例えば13時5分ちょうど、13時6分ちょうどに処理を発火させる方法の紹介です。
setInterval は特定の間隔で処理を繰り返し実行するために用意されている JavaScript の組み込み関数です。
setInterval() – Web APIs | MDN
これはミリ秒単位で繰り返しを指定する関数であり、素直に使うと実行時から1分おき、実行時から30秒おき、に処理が実行されます。これを分が変わった時ちょうどなどに定期実行させたい時があります。これは次でできます。
実装は次です。
// 分が変わった時ちょうどに実行するパターン
setInterval(()=>{
if(new Date().getSeconds() !== 0){
// 毎秒実行して、x時y分z秒がx時y分0秒の時だけ処理本体が実行される様にする
return;
}
// 処理本体
console.log(`fire ${new Date()}`)
},1000) // 1秒ごとに実行
例では 0 秒時に実行としていますが 0 or 30 で30秒ごと、getMinutes % 15 === 0 で15分ごとなど様々な応用ができます。