shizuto on languages

言語好きの組込みプログラマが言語から言語じゃないものまで語ります。On y va!

名前重要

コードをシンプルにすることは重要だ。誰しもがコードを読むのにできるだけ時間はかけなくないと思っている。もしコードを読むのが大好きで大好きで仕方ないという人がいたとしても、同じ時間をかけるのならたくさん深く読めたほうがいいでしょう。それにどうしても時間をかけて読み解かなきゃいけないコードがあったとしたら、誤解してバグを埋め込んだりする危険性も高いはず。じゃあ、どうやったらコードをシンプルにできるのか。

その入り口が名前重要と思っている。「名前重要」といってもおおまかに3段階ぐらいステップがある。

  1. 正しい名前:内容に合った名前を付ける
  2. いい名前:内容が一目で分かる、区別できる名前にする
  3. いい構成:いい名前が付けられるような構成にする

まずは名前を付ける2つ。引数にBoolean値をとってtrueなら電気が付き、falseなら電気が消えるなら何という名前を付けようか。method1(x)とか、push_button(x)なんて関数名では何をしたいのか分からない。たまに「turn_on_light(x)」と付ける人がいて引数なしで電気が付くのなら問題ないけれど、falseだと消えるとはなかなか気づかない。せめて「switch_light(x)」とか付いても消えてもいい名前を付けたい。
こんなレベルでも、最初は引数なしで turn_on() だったものが引数付きに変わったときに関数名をそのまま残してしまって残念な状態になることは多い。気をつけよう。

ひとつひとつの関数の名前としては良くても、似て非なる関数がたくさんあるときに似たような名前が付いていて「何が違うんだ? いつどっちを呼べばいいの?」となっていることも多々ある。コメントで何が違うか丁寧に解説するのもいいけど、まずは名前で区別できるように検討してみよう。

名付けに気をつけるようになったら、次は名前を付けられない変な関数・巨大な関数が気になってくる。それはたいていの場合、関数の設計自体が悪い。単一の機能ごとに小さく分解したり、意味がまとまりそうなところだけまとめて一段階上の名前を付けるなど、「いい名前がつけられる」ような構成を作ることがすごく大事。たいていの場合、名前を付けられないということはいろんなものがごちゃごちゃになっていて構成が悪いのだ。
端から端までいい名前が付けられたらいいのだけど、なかなか現実は難しい。せめてコードを書くときには動けば良いやと書きっぱなしにしないで、いい名前は付けられているだろうかと自問して進むようにしたい。