LoginSignup
0
0

More than 3 years have passed since last update.

アクセス修飾子と命名規則(private/protectedは1単語、publicは2単語):シンプルな処理とシンプルな名前

Last updated at Posted at 2019-09-23

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つの単語で作ると名前だけでなく、処理もシンプルになるように思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0