check禁止令

これまでいろんな人のコードを見てきて、そのたび不愉快になることがあるので、ここで提案したい。

「check」っていう単語の利用、コーディング規約で禁止にしない?
「check」って、実に使いやすい単語なんだよ。「ナントカをチェックする」というと、大抵の検証処理の名前としてOKな気がする。なぜなら抽象度が高すぎるから。言い方を変えると、大雑把すぎるから。大雑把だから、大抵のものに当てはまってしまう。また、「チェックする」という表現が半ば日本語になっていることも使いやすくしている要因だ。だからみんなcheckXXXという名前を使いたがる。

しかし、大雑把ということは、第三者から見て大雑把なことしかわからないってことだ。変数名やメソッド名を見ても大雑把すぎて何をやっているのかよくわからず、結局コードを読まなきゃいけなくなる。

かつて、nullCheckという名前のメソッドをしつこくdisったことがあるので、こちらを読んでいただきたい。「check」という単語を安易に使うと困る理由を書いている。内容を簡潔に言い表すと、「checkXXX()というメソッドは、チェックした結果として何を返すのかわかりづらいので避けるべき」となる。

実際のところ、「check」としか言い表しようのない変数やメソッドを作らなければならないことはある。例えば、チェック内容が多岐にわたる場合、チェック処理を抽象メソッドとして定義している場合などだ。しかしこれは最終手段だし、こういう大雑把な名前を付ける際はコメントなどでしっかり説明を書くべきだ。

少なくとも、「nullか?」「空か?」「数値か?」といった、処理内容が簡潔かつ明確に表せる処理に、安直にcheckEmpty()などと名付けるべきではない。isEmpty()とでもするべき。

しかし、プログラミング初心者やそもそも良いコードを書こうという意欲がない人々に、「なるべく使わないでね」と言ったところで聞いてはくれないだろうから、この際checkという単語を使えないように規約で縛ってしまうほうが良いと思う。そのくらいしたほうが、良いコーディング習慣が身につくのではないだろうか。

checkと似たような危険を伴う単語として「validate」もあるのだが、checkほど一般的でないこの単語を普通に使うぐらいにプログラミングに習熟している人なら、きっとそれなりにわかりやすく書いてくれるだろうから使用許可。