🙄

コーディングの命名:1単語でつけるメリット(One Word Naming)

2020/09/26に公開

文脈・全体を考慮し、同じ言葉を2度使わず、1単語で命名

JavaやPHPの案件で以下のように冗長なクラスやメソッド名をみることがある。
(もっと冗長な名前のものがあるのだけど、書くのが鬱陶しいので割愛)

LongerFileReader.java

package com.example.filesytem;

class FileReader {

  public static String readFile(String filePath) {
    //.... 処理
  }
}

上のコードぐらいな特に冗長さを感じないかもしれないけど、これと同じ発想をしていくとそのうち、とてつもない長いコードが生まれる。(Javaの現場いったことある人なら分かると思う)

これを1単語で名前付けしていく。
 ただ、Javaだと読み込み時にエイリアスが付けられないので、どうしても2単語でせざるを得ないので、PHPで書いてみる。(Javaは本質的に短くかことが困難な文法だなあと実感)

ShortFileReader.php

namespace Example\File;

class Reader {

  public static content($path) {
    //.... 処理
  }
}

  • まず、packageで「file」をつける。これで、このパッケージ以下は「ファイル」を扱っているのが分かる。
  • class名で「Reader」をつけるので、このクラスはファイル読み込み処理をしているのが分かる。
  • メソッド名は、読み込む対象にする。動作をつけるのが通例だろうが、そもそも動作はクラスで付けているので分かる。
reading.php

use Example\File\Reader;

$path = "/xx/xxx";
$content = Reader::content($path);

Javaの場合、コーディング規約があるので通例から外れるのが難しいところはあるかもしれないが、他の言語でシンプルに名前付けできるなら、できるだけ単語1つでつけるようにするとコードが見やすくなる。(Javaはエイリアスが付けられないので、最低でも2単語を付けないと名前の衝突が起きやすい。)

また、単語1つでするということは、そのクラスやパッケージの役割が限定され、コードの独立性が高まってくる。つまり、FatClassなどの回避にも役立つ。

まさに、「名は体を表す」でシンプルな命名はシンプルなロジックを実現する。

クラス名、メソッド名が2単語以上であったり、引数の数が多い場合、それはそのメソッドに役割を担わせすぎているサインであり、単語を1つにしていくように命名し、引数も少なくしていく。
 そうすることで、独立性の高いシンプルなコードになる。(もちろん、テスタブルでもある)

Discussion