だいごろうのブログ

熊本出身で大阪、東京、パリを転勤して、今は福岡でデータエンジニアです

メソッドの命名で主語を気にしていること

読み易いなーって思うメソッド名の付け方

最近、コード書くとき、どの視点からなのか、英語の文法的に読み易いのかってのを意識してメソッド名をつけてる。(オブジェクト指向で。関数型だと当てはまらないかも)

モノを扱う側か扱われる側かでメソッド名の作り方を分けた方がいい

  • 主語が扱われる側のモノであるクラス(Dto、entity、enum、とか
  • 主語がモノを扱う側であるクラス(logic、action、util

メソッド名を意識的に分けると言うこと。
Javaで書いてるのでJavaメインで書いて行きます。他でも代用できればいいな。

扱われる側のメソッド

  • 前置詞から始める
  • of() toString() intoMap()

扱う側のメソッド

  • 動詞で何をするか表現する
  • 引数のクラスはなるべくメソッド名に入れない
  • 返り値のクラス名などを入れる

同じことをするメソッドを両方から見てみる

例 > オブジェクトを生成、変化、抽出

例えばcategoryって言うクラス(もしくはenum)があって、カテゴリは数字で分けられてる場合

# 前提:DB上で1はオモチャというカテゴリ
# 生成> 1という値のカテゴリを取得する
Category.of(1);
Logic.pickupCategoryBy(1);

# 変化> オモチャカテゴリをDBで表現する値を取得する
toyCategory.toDBVal();
Logic.convertToDBValFrom(toyCategory);

# 取得> オモチャの商品のリストを取得する
toyCategory.getItemList();
Logic.getItemListFrom(japanCategory);

# 抽出> 女の子向けの商品を抽出する
toyCategory.forGirls();
Logic.extractForGirlsFrom(toyCategory);

こんなかんじでまとめることで、英語の文を書くようなプログラムを書いてる
(気になれる)
組み合わせてメソッドを作ってみるとこんな感じ。

# LogicClass
/**
* 指定の商品が、対象のカテゴリに含まれるか
* @param categoryId 対象のカテゴリID
* @param targetItem 指定の商品
* @return 含まれるならtrue
**/
public boolean includeItemIn(int categoryId, Item targetItem){
  Category targetCategory = Category.of(categoryId);
  List targetItemList = getItemListFrom(targetCategory)
  return targetItemList.has(targetItem);
}

こんなかんじですかね。
読みやすいですかね?読みにくいですかね?
僕は、けっこう、読みやすいと思うます。