やわらかテック

業務を通して得られた知見、知見。個人的に試してみたこと、興味のあることについてアウトプットしています。

【JavaScriptサンプル有り】例外が発生した後の処理を高階関数にまかせる

これは便利

こちらの書籍で紹介されていた、リファクタリングの手法の1つで、例外が発生した後の処理って場面によって何をしたいか違うよねを叶えるためのコードです。例外が発生した(された)まま、処理を終了したい、ハンドリングして、値を返したいという異なる要望を記述することが出来ます。

const campMember = ["りん", "なでしこ"];
const campValidation = (memberName, unexpectExec) => {
    if (campMember.includes(memberName)) {
        return true
    } else {
        return unexpectExec();
    }
}
const debug = (memberName, unexpectExec = () => { throw 'メンバーではありません' }) => {
    const result = campValidation(memberName, unexpectExec);
    console.log(result);
}

実行サンプル

debug("りん", () => { return false })
# true
debug("なでしこ", () => { return false })
# true
debug("はなこ", () => { return false })
# false
debug("はなこ", () => { throw '残念ながらメンバーではありません' })

// debug("はなこ", () => { throw '残念ながらメンバーではありません' })
//                      ^
// 残念ながらメンバーではありません
// (Use `node --trace-uncaught ...` to show where the exception was thrown)