JavaScript ガード節を使ってさらに分かりやすいコードを書こう

ガード節とは

条件分岐を書く際に、メインの処理と例外的な処理を分岐させるケースがあります。

この時に、例外的な処理は先にリターンするようにすることで、条件分岐をわかりやすくすることができるケースがあります。

具体例

以下のようなコードがあります。

const getPoint = user => {
  let result;
  if(user.isBlack){
    result = {point: 0, code: 'BLACK'}
  }else{
    if(user.isGray){
      result = {point: 0, code: 'GRAY'}
    }else{
      result = {
        point: Math.floor(user.currentPoint * (user.visitCount * 0.13)),
        code: ''
      }
    }
  }
  return result
}

ユーザーのポイント情報を返す処理です。

ブラックユーザーやグレーユーザーの場合はポイントは0としています。

そして、それ以外はポイントの計算をします。

ここでいう例外の処理とは、ブラックユーザーやグレーユーザーの処理です。

ガード節を使ってリファクタリングしてみましょう。

const getPoint = user => {
  let result;
  if (user.isBlack) return {point: 0, code: 'BLACK'}
  if (user.isGray) return {point: 0, code: 'GRAY'}
  result = {
    point: Math.floor(user.currentPoint * (user.visitCount * 0.13)),
    code: ''
  }
  return result
}

例外のブラックとグレーのケースを先にリターンすることで、条件分岐のネストが浅くなり見やすくなりました。

そして、もう一つ重要なことは、先にリターンすることで、ブラックとグレーは例外的な分岐であるという意味を持たせることができたという点です。

読み手は、ここは例外的な処理でその次にメインの処理がくることを予想できます。

さて、上のコードでも良いのですが、変数のresultは不要なので削除しましょう。

不要なローカル変数を削除することで、読み手が気にすることが少なくなります。

const getPoint = user => {
  if (user.isBlack) return {point: 0, code: 'BLACK'}
  if (user.isGray) return {point: 0, code: 'GRAY'}
  return {
    point: Math.floor(user.currentPoint * (user.visitCount * 0.13)),
    code: ''
  }
}

お疲れ様でした。