😇

変数名って難しい ~handle〇〇編~

2022/05/02に公開
2

はじめに

変数名って難しいなと思ったことはありますか??
私は自分でコード書く時や、レビューして他人のコードを読む時によく思います。
みんな何かしら思いや考えがあり、実際の業務で触るコードは結構わちゃわちゃな印象です🙀

意味合いが伝わればOKだったり、命名規則などのルールを明記して統一したり、色々見ますがどこまで徹底されているのでしょうか!?

handle〇〇編

アクションをボタンなどのイベントで発火したいケースにおける命名規則を紹介したいと思います。

export const HogePresenter: FC<HogeTypes> = (props) => {
  const { start } = props
  return (
    <>
      <div>Welcome to Hoge</div>
      <button onClick={start}>start</button>
    </>
  )
}

このケースでstartというアクション(Container側でdispatch処理がラップされた関数)は、ボタンをクリックしたときに発火されるのは用意に想像できます。
start以外の関数も一緒に発火させたいケースはどう扱えばいいでしょうか??

export const HogePresenter: FC<HogeTypes> = (props) => {
  const { start, opneModal } = props
  return (
    <>
      <div>Welcome to Hoge</div>
      <button
        onClick={() => { start(); opneModal(); }}
      >
        start
      </button>
    </>
  )
}

onClickにツッコミますか?
それともhandle〇〇みたいな関数を作成しますか?
(handleClick, handleStarthandleButtonなどなど)

やはり分かり易さが一番じゃい

私としてはこの命名規則を推します!!

handle + 対象 + Event

最初、handle + Event + 対象で記載していました。
命名についてご指摘いただき、handle + 対象 + Eventの方がより明確だと思いましたので、採用させていただきました🙏


このルールの良いポイントは、何(対象)どんなイベント(Event)を意味しているかが非常に分かりやすい点です。

export const HogePresenter: FC<HogeTypes> = (props) => {
  const { start, openModal } = props
  // handle + Event名(今回はClick) + 対象(StartButton)
  const handleStartButtonClick = () => {
    start();
    openModal();
  }
  
  return (
    <>
      <div>Welcome to Hoge</div>
      <button onClick={handleStartButtonClick}>作成</button>
    </>
  )
}

handleStartButtonClickがスタートボタンのクリックイベントがハンドリングされているのが分かります。
そのまんまですね!

どんどんボタンや色々なイベントで発火したいアクションが増えていくと、ごちゃごちゃして読みにくくなりメンテしづらくなるはずです。
そういった負債となり得る状況を作りにくくするために、この命名規則は役に立ってくれます!!

そもそもとして

  • Presenter側で関数を組み合わせているけど正しい責任分離なのか?
  • start自体にopenModalの責任があるはず!
    などなど。。。別の問題も少し見えてきます😅
    これらはコンポーネントの設計、関数の責任によって色々変化してくると思います!

最後に

変数名は設計の思想と大きく関係してくると思ってまして、ContainerやPresenterの責任をどう分けるかなど考えることはいくつもあリます。
その中で100%完璧なものは難しいですが、できるだけ今後の負債になりにくく、コードを読んで意図が分かる変数名をつけることはとても大切です。

Discussion

dyecmadyecma

こういった命名ってチーム内で統一させたいですよねー。

個人的には、

handle + Event + 対象

より

handle + 対象 + Event 

とするべきかなーと思っています。

以下根拠ですが、

handle=対処する

という動詞として捉えると、

「ボタンのクリックイベントに対処する」= handle { ( click of button ) event }

となり、

「イベント」を大きい名詞節と捉えて、handle button click event → handleButtonClick

となるのが、英語との文構造として自然かと思っています。

ryohamaさんが挙げた例で考えると

「スタートボタンのクリックイベントに対処する」 = handle < { click of  ( start button ) } event >

という文構造になりますので、

handleStartButtonClick

が適切ではないかと思います。

こういった命名って迷う方多いので、記事作成していただいていて嬉しかったです👍

ryohamaryohama

コメントありがとうございます!
確かに、handle + 対象 + Event の命名の方が英語の文として自然ですね。

記事を更新しておこうと思います!