命名はプログラミングの世界で昔からある定番の話題です。変数名から関数、オブジェクトの名前まで、きちんと付けられている人は多くありません。そもそも、なぜ変数名が大切なのか、本当に理解していますか? また、変数名そのものに意味を持たせることに加えて、ハンガリアン記法やキャメルケースなどの一般的な命名方式をどのように選べばよいのでしょうか。ここでは、変数の命名について私が考えていることを簡単にお話しします。
ここで議論したいのは、キャメルケースやハンガリアン記法の長所と短所ではありません。それらについては Wikipedia や Google に情報が山ほどあります。それよりも大切なのは、なぜ良い変数名が必要なのか、そして命名方式を「どのように選ぶか」だと考えています。
ここでは変数名という言葉で統一して書きますが、関数名やオブジェクト名にも同じことが当てはまります。
なぜ変数名はそれほど重要なのでしょうか。私は2つの側面があると考えています。よく知られているのは、悪い変数名はコードの読みやすさを下げるということです。コンピューターはそれでもコンパイルして実行できますが、コードは人が読むために書くものです。後からメンテナンスするとき、他の人はもちろん、そのコードを書いた本人でさえ、自分が何を書いたのかを理解するのに多くの時間がかかります。私自身もこの点を強く感じていますし、数年の実務経験があれば、きっと同じように感じるはずです。だからこそ、変数名には意味があることが必要で、x1、x2、x3のような名前は避けるべきです。
ただし、変数名そのものに意味を持たせるだけでなく、次のような命名方式を見たことがあるかもしれません。
var studentList var StudentList var student_list var arrStudent var students
変数名は自分で理解できるように意味を持たせるべきだということは、誰もが分かっています。では一歩進んで、アンダースコアを使うべきか、それとも大文字と小文字を使い分けるべきか、という点はどうでしょうか。好きな方式を選んで、異なるプログラミング言語でも同じように使う人も多いですし、特に区別せず、アンダースコアを使いたいときは使い、大文字を使いたいときは大文字にする人もいます。しかし実際には、命名方式は開発チームやプログラミング言語の慣習によって決めるべきものです!
まず「プログラミング言語の慣習」について話します。どのプログラミング言語にも、名前の付け方を推奨するコーディングスタイルのドキュメントがあります。たとえば Python では、変数、定数、関数、オブジェクト、メソッド、属性それぞれに異なる決まりがあります。オブジェクトは先頭を大文字にし、定数はすべて大文字で書き、変数はアンダースコアで単語を区切ります。最初は意味がないと思っていましたが、後になって、その言語の慣習に沿ったスタイルを学ぶと、開発のスピードが大きく上がることに気づきました。Java や Python を書くとき、サードパーティのライブラリを使う場合でも、ドキュメントを見ずに関数名をとても速く入力できます。使い方を暗記しているわけではありません。公式のライブラリもサードパーティのライブラリも同じ命名慣習に従っているので、関数名をすばやく推測できるのです。
簡単に言えば、プログラミング言語にはそれぞれ慣習があるので、コードを書くときはできるだけその慣習に従うのがよいということです。そうすれば、他の人がコードを読みやすくなり、ライブラリを使うたびにドキュメントを調べ直す必要もなくなります。
ですから、1つの方式をすべての言語で使うのではありません! 実際、言語ごとに慣習が異なることも多いのです。
次に「開発チーム」について話します。チームの中には、アンダースコアに慣れている人もいれば、キャメルケースに慣れている人もいるでしょう。しかし同じプログラムを一緒に書くのですから、チーム専用の命名方式を決めて、1つのファイルの中にさまざまなスタイルの変数名があふれないようにすべきです。この点は、私のコードの美しさへのこだわりによるところもあります。同じファイルの中に2種類のスタイルの変数名があると、私にはまったく筋が通らないように見えるのです。同じ関数名なのに、なぜアンダースコアを使うものと大文字を使うものがあるのか、いったいどんな理屈なのでしょう!! 言語の慣習と同じく、もしチームで命名スタイルが統一されていなかったら、関数を使うたびにまず相手のファイルを見て、アンダースコアを使っているのか、それとも別の方式なのかを確認しなければなりません。面倒だと思いませんか?
同じように簡単にまとめると、他の人と一緒にプログラムを書くなら、チーム専用の命名スタイルを決めるべきです(そして言語の慣習にもできる限り配慮します)。各自が慣れたスタイルを使うのは避けましょう。そうしないと、コードのスタイルがばらばらになるだけでなく、関数を呼ぶだけなのに相手のコードを読みに行かなければならず、とても時間の無駄になります!
実際、チームで作業するときは、一般的にチーム専用の Coding Style も決めておきます。たとえば、スペースを使うかタブを使うか、インデントを2つ分にするか4つ分にするか、などです。私は、2つのスペースと4つ分のタブが混在しているコードを見たことがあります。正直に言って、とても辛いものでした……