privateやprotectedの処理は単語は1つ、publicなものは単語2つ
命名において、長さをどうするかは悩みどころ。
Goなどは、1文字変数名が多かったりする。変数の宣言で型がわかって、スコープが短ければ、それが何を表すかはわかるので、それでもいいところはある。けど、1文字変数はよほど明確でないと命名しにくい。
Pythonのモジュール名をつける時、基本はアンダースコアは使わない。使うなら階層を作る。だから、1単語で命名する。
翻って、Javaなどで冗長なものはやたらと単語をつなげる。その結果、いろいろな役割をクラスや関数が担ってしまう。
Pythonのように単語を一つに絞ることで、各モジュール(パッケージ)の役割が絞られて、自ずと一つのクラスやソースがシンプルになっていく。
原則、1単語でモジュール(パッケージ)名、クラス名、メソッド名をつくれば、ソースの内容がシンプルになっていく。
だが、実際、処理の実行部分では、いろいろなメソッドを呼び出し、どうしても単語1つでは衝突が起こる。その場合を考えて、2単語でつくると衝突の可能性が半減する。それでも駄目な場合は、asをつかったエイリアスや、JavaならFQDN(Fully Qualified Domain Name)で、名前空有間をつける。
経験的に、モジュールの役割を独立化していけばあまりFQDNを使う局面は少ない。できるだけパッケージ全体で一つの機能を作っていく。
基本は、パッケージ内で完結するもの、すなわち、private/protectedのものは1単語で命名して、パッケージ外から使うpublicなものは2単語でつくると効率的だと思う。
名前が衝突するのは、そもそも一つのクラスやメソッドの役割が混在している。それをばらして独立化することで、衝突の確率が下がっていく。
名前が冗長なものはソースも冗長になる
仕事では、大手企業のJava案件を見ることが多いが、Javaは冗長な名前が多く、それと比例して、FatClassが多い。つまり、名は体を表すで、助長な名前のクラスやメソッドは、処理がやたら長い。
逆に、PythonとかGoでコーディングすると、Lintに従っているコードは名前が短いので、それにあわせて処理を分割してシンプルになっている。
プロジェクトのアーキテクトの方針もあるだろうが、基本はprivateやprotectedの処理は単語は1つ、publicは2つの単語で作ると名前だけでなく、処理もシンプルになるように思う。