前々回において、Promiseの基本を把握したところで、ChatGPTに作ってもらった郵便番号のバリデーション関数validatePostCodeの確認と修正の続きをする。
Promiseが非同期処理の結果を表すものであるならば、このvalidatePostCodeは単に入力結果が7桁の数字かどうかをチェックするためだけの関数で非同期処理に当たらないから、Promiseを使う必要がないのではないかと思った。(ChatGPTが何を考えて入れたのかは知らないが!)
そこで、Promiseを使うことのメリット、使うべき場面と使わないべき場面など、機関銃のように質問を浴びせてやった。
要約すると、Promiseを使うメリットは3つ:
- 非同期処理の管理
- エラーハンドリング
- チェーン可能
そしてPromiseは非同期処理のある場面でしか使うべきではない。
つまり、非同期処理のないvalidatePostCodeでは、Promiseの出番がないはずだ。
ChatGPTに頼らずコードを少し修正してみたが、よくわからなくなったので、やはりChatGPTに尻拭いを頼んだ。
これで、7桁の数字かどうかだけをチェックし、結果を理論値で返すごくシンプルな関数が出来上がった。
できあがったけど、1つ機能を追加したい。ユーザーが郵便番号を入力する時、ハイフンありとハイフンなしのどちらのケースもあると思うが、上記のコードはハイフン無しの場合にしか対応できず、ハイフンありで入力されるとチェックの結果が失敗(false)となってしまう。
ユーザーにハイフンなしで入力するように要請するのもアリだが、それでは不親切だ。だから、次のコードを関数に追加した。
postalCode.replace(/-/g, '');
これで例えば「123-4567」と入力されても、「1234567」に変換されてから、次のチェック処理に移されるようになる。
完成後のコードはこちら。あ、そそ、他の関数の名前と統一のために、関数名をvalidatePostCodeからvalidatePostalCodeに修正した。
/**
* 正しい郵便番号フォーマット(7桁の数字)であるかをチェック
*
* @param {string} postalCode - チェックする郵便番号
* @return {boolean} 7桁の数字ならtrue、でなければfalseを返す
*/
function validatePostalCode(postalCode) {
// ハイフンを除去
postalCode.replace(/-/g, '');
return /^\d{7}$/.test(postalCode);
}