はじめに
実務では、実装が完了したら、プルリクエストを作って、先輩にレビューをしていただきます。
レビューでは、いろいろなことを学ぶことができます。
本日は、使用頻度は低くても、使えると便利なテクニックを教えていただいたので共有します!
この記事で伝えたいこと・結論
- 引数が何を指しているのかわからない問題を解決するOptions Objectパターンというテクニックがある!
- レビューでレベルアップした書き方を学ぼう!!
具体例で説明
背景
プロダクトの契約プランについて、プランを変更した際にアラートを表示する。
表示するアラートは、どのプランからどのプランへ変更するかによって内容を変える。
その分岐パターンが複数あったため、共通部分をプラン変更を確認する関数として切り出して実装した。
プルリクエストを作成し、先輩からレビューいただいた。
問題
以下が私が書いたソースコードです。
一見良さそうではないでしょうか。実際、この判定結果を用いて、アラートの出し分けもできています。
レビューで先輩から「実装自体は問題ないけど、レベルアップしてみよう!」と言われ、リファクタすることになりました。
// どのプランからどのプランへ変更するか確認する
const isPlanChange = (currentPlan: Plan, nextPlan: Plan) => {
user.currentPlan === currentPlan && user.nextPlan === nextPlan
};
// プランA→プランBへの変更かどうか
const willChangePlanAToPlanB = isPlanChange(Plan.planA, Plan.planB);
// プランA→プランCへの変更かどうか
const willChangePlanAToPlanC = isPlanChange(Plan.planA, Plan.planC);
isPlanChange関数
を呼び出しているところを見てください。
(Plan.planA, Plan.planB)
を引数で渡していますが、ここだけを見ると、この引数が何を指しているのかすぐにはわかりません。
変数名を見たり、関数を定義しているところを見て初めて、変更前のプランと変更後のプランを指していることがわかります。
この引数が何を指しているのかわからないという問題を解決するために、引数をオブジェクトにして名前をつける、Options Objectパターンというテクニックを使います!
キーワード引数とOptions Objectパターン
こちらのサイトを参考にしました。
キーワード引数とOptions Objectパターン
キーワード引数とは
まずは、キーワード引数について知っておきましょう。
キーワード引数(keyword argument)は、Pythonの機能です。関数呼び出し時に、値だけを指定するのではなく、引数名を使って「名前=値」の形式で引数を指定する方法です。
# Pythonコード
def calculateTriangleArea(base, height):
base * height / 2
calculateTriangleArea(base=10, height=20) # => 100
Pythonは全くわからないのですが、こんな書き方ができるみたいです。
=
で繋ぐと数学みたいでわかりやすいですね。呼び出し時にcalculateTriangleArea(10, 20)
と書いてあるよりも、後から読んでわかりやすそうです。
しかし、残念ながらJavaScript、TypeScriptにはこれに該当する機能はないとのこと😢
その代わり、似たようなことがOptions Objectパターンで実現できます。
本日はここまでです。
Options Objectパターンについては明日記載します!!