はじめまして、鳥井雪です。
ヒューマンアカデミー こどもプログラミング教室の教材監修をしています。
このコラムでは、現役職業プログラマーとして、実際にプログラマーが毎日どんなことを考えてプログラミングしているかを、わかりやすく紹介していけたらと思っています。
プログラミングで、「名前をつける」というのはとても重要な作業です。 そのものずばり「名前重要」、「適切な名前をつけることができたら、(プログラミングの)設計は8割できたようなもの」なんて言葉があったりします。プログラミング言語Rubyをつくったまつもとゆきひろさんの言葉ですね。みなさんも、待望のわが子や、お迎えしたペット、自分の作品や、子供のころにはお気に入りの人形なんかに、一所懸命名前を考えた経験がおありかと思います。
プログラマーは、毎日いろんなものに名前をつけています。 変数の名前、関数の名前、ファイルの名前、ライブラリ(ある機能をもったプログラムを、いろんなプログラムの中で使えるようにまとめたもの)の名前…。そしてその名前に悩みます。 「適切な名前が思いつかずに半日悩んでいる」とか、大きな機能だと「3年間決まらなかった名前がとつぜんひらめいて」なんて話も聞くくらいです。
プログラミングでの命名が、わが子やペットの名付けとちがうのは、わかりやすさを一番大事にするということです。
たとえば変数名だったら「それが何か」、関数名だったら「それが何をするものか」が、一目で分かる名前を考えるんですね。どうして名前をそんなに大事にするんでしょうか?
一番には、あとから読んで苦労しないためです。
こんな状況を考えてみましょう。
プログラムを書いていて、ある変数を用意したくなったとします。変数というのは、プログラムの中で「なにかそういう値がある」ことにして名前を用意し、
そこに実際の値(1とか10とか、"Hello"とか)を入れたり、入れ替えたりして使うものです。
たとえば「そのプログラムが使われる国」という意味で「using_country」という名前の変数を用意して、そこに"Japan"という実際の値を入れます。
そうすると、
という「名前」を呼び出すことで
という結果を得られます。
これだけだったら
と書くのと同じです。でもusing_country は、そのプログラムが使われる国ごとに違うので、"Japan"だけが欲しい結果だとは限りません。その国(実際の値)が"China"でも"Germany"でも、同じプログラムで「そのプログラムが使われている国の名前を表示する」という目的が達成されるわけです。
さてその変数ですが、もしこれが「using_country」ではなくて「name」だったらどうでしょう?
国の名前ですからnameでも間違いではなさそうです。
でも、このプログラムを後で別の人が読んだ時に、
と書いてあるのと、
と書いてあるのでは、「そのプログラムが何をやりたいか」の"わかりやすさ"はどちらが上ででしょうか?
「using_country」だと思います。わかりやすい、読みやすい、ということで、まず理解のコストが下がります。
それから、後でそのプログラムを書き換えて機能を追加したいときに、誤解からのバグの危険性がすくなくなるのです。
「name」という変数名をみて「なるほどきっとここには使う人の名前が表示されるんだな。
じゃあもっと丁寧に、
に変えてあげよう」と手を入れて、
と表示される、なんてミスが防げるわけです!
「名前重要」というのは、なにもプログラミングの世界だけの話ではありません。
たとえば夏に向けた衣替えで、衣装ケースに今は使わない洋服をしまって、ラベルを貼るとします。
しまったすぐ後はどこに何が入っているかわかっているので、すぐ取り出せます。でもひと夏が終わって、さてそろそろ肌寒くなってきた頃。単に「衣類」というラベルが貼ってあるのと、「秋物スカート」「長袖シャツ」と書いてあるのでは、ありがたさがまったく違いますよね。
プログラマーは、日々たくさんのプログラムを書くので、あまり自分の書いたコード(プログラム)をいちいち覚えていたりしません(人によっては覚えていることもあるらしいですが)。「三日後の自分は別の人間だと思ってコードを書け」という教えがあるくらいです。ひと夏どころではないですね。
というわけで、プログラマーは日々、「ここで本当にやりたいことを表せる名前はなんだろう?」「いい名前がつけられているかな?」と頭を悩ませているわけです。 自分だけが使うプログラムや、日常生活でも、すこし「名前」や「ラベル」を気にしてみるのが、プログラミングが上達する手がかりかもしれませんね。具体的に、「いい名前をつける」ためのポイントについては、また次回。
一覧ページへ戻る