エンジニア必須スキル : 名前を正しく付け、正確に区別する
プログラムで必ず登場するのが、変数やメソッドと呼ばれるもので、変数やメソッドには名前を付ける。
名前を付けるという行為は、その名前が示す範囲を定義し、対象物とそれ以外を明確に区別するということだ。
クラス名であれば、それが「クラス」という括りで役割を持つことを表すし、例えば「登録ユーザを管理するクラス」なのであれば、そのクラスは「登録されたユーザにまつわる情報を保持するモノであり、それ以外には手を出さない」といったスコープ、責任範囲が見えてくる。よく「単一責務の法則」とか呼ぶあれは、名前を付けるということの意味を深く考えないと真に理解できない。
名前を付けるとはそういうことなので、名前を付けてからさて何をさせよう、ではなく、何かしたいことや表したいことがあって、それをまとめて他と区別する必要が出てきたときに、適切な名前を考えるのである。
変数名やメソッド名の名前の付け方が下手な人は、英語ができないという理由の他に、「自分が何をしたいのか言語化できていない」という状態が強く考えられる。恐らく日本語で変数名をつけてよいと言われたとしても、適切な名前が付けられないことだろう。
もっと言えば、何か説明文書を作ってほしいとか指示されたときに、ファイル名、文書全体のタイトル、章立てなどがグチャグチャだったり、全く出来ていない人は、母国語である日本語でも「物事を言語化する」「名前を付けて区別する」という習慣を付けてこないまま、もしくはその重要性や影響を無視したまま育ったものと思われる。
こういう人に「名前を付けるってのは大事で……」といくら説明したところで、「でも自分、国語苦手だし…」などと理由にならない言い訳をするだけで終わる。それが周りに混乱をもたらしていて迷惑であり、即刻改善しないと邪魔な存在だということに気付いていないのだ。
ただ、指摘したら直るものかというと、基礎的な言語能力は育ちの問題だと思うので、相当困難だと思う。親でもない仕事上の付き合いだけの他人が指導してやる義理もない。こういう日本語が不自由で変数名が意味不明な人間とは距離を置くしかない、というのがぼくの所感。
さて、じゃあ言って分かるレベルの人たちに何かアドバイスするとしたら、ぼくは先程挙げた、「単一責務の法則」だけ守れればまずは良いと思っている。
そのクラスは何をするものなのか。単一責務の法則に則れば、一つしか責務がないのだから、「○○をするクラス」と一文になるはずだ。これをクラス名にする。そうしたら、そのクラスには他の仕事をさせない。他の仕事は他の名前を持つクラスを作ってやらせるのだ。
これなら一つの名前が指し示す物事は一つに限定でき、同じ言葉を使うことで他の物事と区別できるであろう。
そうそう、同じものを指すのに言葉を毎回変えるのも NG。名前は最初に定義して、同じ名前を繰り返し用いるのだ。長ったらしい文書に出てくる「(以下『Hoge』と呼称)」といった注釈は、実は名前の定義だ。
物事を区別して話すことが、相手に伝わる会話・文章になる。そして物事を区別するには名前を付けて特定の範囲を定義付けてやることが大事なのだ。
名前重要。