前提・実現したいこと
ユーザー情報の作成関数とユーザー情報の更新関数があります。
javascirpt
1const createUser = () => { 2 const name = getInputNameValue() 3 if(!name) return alert("名前を入力してください。") 4 const description = getInputDesValue() 5 if(!description) return alert("説明を入力してください。") 6 const newUser = {name: name, des: description} 7 // 以下ユーザー情報作成 8} 9 10const updateUser = () => { 11 const name = getInputNameValue() 12 if(!name) return alert("名前を入力してください。") 13 const description = getInputDesValue() 14 if(!description) return alert("説明を入力してください。") 15 const updateUser = {name: name, des: description} 16 // 以下ユーザー情報更新 17}
どちらの関数も冒頭が同じなので、簡素化したいです。
試したこと・発生している問題
下記のようにバリデーションを関数化しました。
javascirpt
1const validation = () => { 2 const name = getInputNameValue() 3 if(!name) return alert("名前を入力してください。") 4 const description = getInputDesValue() 5 if(!description) return alert("説明を入力してください。") 6 return {name: name, des: description} 7} 8 9const createUser = async () => { 10 const response = await validation(); 11 // 以下ユーザー情報作成 12} 13 14const updateUser = async () => { 15 const = response = validation(); 16 // 以下ユーザー情報更新 17}
上記のコードだと、バリデーションに引っかかりalert
が実行されても、validation
関数の実行が中止されるだけで、作成または更新が行なわれるかと思います。
そこで、validation
関数の返り値を元にalert
を出すよう、下記のように変更しました。
javascript
1const validation = () => { 2 const name = getInputNameValue() 3 if(!name) return "noName" 4 const description = getInputDesValue() 5 if(!description) return "noDes" 6 return {name: name, des: description} 7} 8 9const createUser = async () => { 10 const response = await validation() 11 if(response === "noName") { 12 return alert("名前を入力してください。") 13 } else if(response === "noDes") { 14 return alert("説明を入力してください。") 15 } 16 const newUser = response 17 // 以下ユーザー情報作成 18} 19 20const updateUser = async () => { 21 const response = await validation() 22 if(response === "noName") { 23 return alert("名前を入力してください。") 24 } else if(response === "noDes") { 25 return alert("説明を入力してください。") 26 } 27 const updateUser = response 28 // 以下ユーザー情報更新 29}
上記関数でバリデーションに引っかかった場合、アラートが表示され、作成または更新を中止できるかと思います。
しかし元のコードと比較して、コードの総量は増え、返り値の判定で結局共通するコードが発生したため、簡素化できていないと言えます。
回答3件
あなたの回答
tips
プレビュー