Upgrade to Pro — share decks privately, control downloads, hide ads and more …

名は体を表していますか

 名は体を表していますか

たかが命名、されど命名。名前から考えるよいコード【タガヤス その4】発表資料(2)
https://tagayas.connpass.com/event/80363/

Infiniteloop

October 17, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. 関数名 function giveReward($id){ $reward = fetchRewardMaster($id); storeReward($reward); sendNotification(‘%sを受け取った’, $reward->name()); //

    通知 } giveRewardは fetchRewardMaster と storeReward を抽象化した名前 sendNotificationが含まれている名前には見えない
  2. 関数名 function giveRewardAndNotice($id){ $reward = fetchRewardMaster($id); storeReward($reward); sendNotification(‘%sを受け取った’, $reward->name()); //

    通知 } わかりやすい名前をつけるということは、見た目を取り繕うことじゃない やっていること(大事なこと)を書いて読み手に伝えるのは大切だと思う
  3. 関数名 function giveRewardAndNotice($id){ $reward = fetchRewardMaster($id); storeReward($reward); sendNotification(‘%sを受け取った’, $reward->name()); //

    通知 } さらに、この関数を一言で表す(より抽象化された)名前は無いだろうか? 名前(境界)が存在しないなら、処理の境界も存在しないかもしれない
  4. 関数名 function giveRewardAndNotice($id, $send_notice){ $reward = fetchMasterReward($id); storeReward($reward); if ($send_notice)

    sendNotification(‘%sを受け取った’, $reward->name()); } 処理境界を間違えていると、そのうちこんなコードになる
  5. クラス名 class NotificationService{ function sendNotification(); function addNotificationText(); function removeNotificationText(); }

    C「サービス!なんでもできる。いわゆるゴッド!!」 C「受け取り処理もここでいいっしょ」
  6. クラス名 class NotificationService{ function sendNotification(); function addNotificationText(); function removeNotificationText(); function

    recieveNotification(); } A「送信クラスだったのに・・・なんでメッセージ管理とか受信処理まで」