単純な話、getであんまり検索したくない

定番レビュー

getという名前のついたメソッドで、検索処理を書いているのをよく見かけます。

昔からできるだけ直してもらうように提案してきました。強いこだわりがあればしょうがないですが...

 o 単純に思いつかなかったから
 o 別段深く考えずにメソッド名を付けていただけ

とかであれば、ちょっと違う名前にして欲しいなと。

get...は軽いイメージ

少なくとも Java で get...() というと、特別なイメージが刷り込まれているもので、

内部で持っているインスタンス変数をただ戻すだけのメソッド

というイメージあります。
厳密にそうでないにしても...

少なくとも処理としては軽いイメージ

でも、それで検索しちゃっていると...

for (SeaBean bean : beanList) {
    ...いろいろな処理
    Integer memberId = bean.getMemberId();
    Member member = logic.getMember(memberId);
    String memberName = member.getMemberName();
    ...いろいろな処理
}

他の普通の get...() と紛れて、ぱっと見でループ内検索していることがちょっと気付きづらいんですよね。いわゆる「ぐるぐる系」です。それを発見しづらくなるという話です。じっくり読めばそりゃわかりますが、みんなでやるレビュー会とかって、そんなじっくり読めなかったりします。(他のテーマで時間たくさん取るから)

もし、パッと見で気付ければ、「それ直しておいて」ですぐに終了。個人レビューでも、見るものはたくさんあるので、サラッと追うだけで気付けるコードってのは、すごく心強いのです。

それができずに放置されると...後々パフォーマンス劣化トラブルとして、ボディブローのように効いてくるのです。

重いイメージなら気付きやすい

もし、こうだったら?

for (Integer memberId : memberIdList) {
    ...いろいろな処理
    Integer memberId = bean.getMemberId();
    Member member = logic.selectMember(memberId);
    String memberName = member.getMemberName();
    ...いろいろな処理
}

レビューの時とか、パッと見で「おおっと、なんかおかしいよ!?」ってのがすごく気付きやすい。

別に select でも search でもなんでもいいですが、そこで...

通信して別のサーバーのハードディスクにアクセスしている

というのが直感的に分かれば。

たぶん、書いてる人も書いた後で「いやぁ、これはないなぁ」とか、自分で気付いてリファクタリングするきっかけになりやすいかなと。

仮に、スタートアップの開発で実装スピード優先のため、ぐるぐる検索はいったん置いておくと判断をしたとしても、後でリファクタリングする人がすぐに発見しやすいようになっていればとまだ救い。(まあ、そもそもtodoコメント残しておいて欲しい)

コードの解析ツールとかでも、発見しやすいかもしれませんしね。

もちろん、全部じゃないよ

もちろん、
 o DBにアクセスしているのか?
 o キャッシュから取っているのか?
 o はたまた別のところから取っているのか?
それをわざと隠蔽したいとかであれば別ですよ。
狙って LazyLoad するとかね。
要は、getってわりとボカした名前なわけです。

ただ、そういう場面はそんなに多くはない。
あと、アーキテクチャ次第でもありますね。

名前を直すのは簡単

今の時代、IDEリファクタリング機能があるので、
メソッド名を直すのは簡単です。

Eclipseであれば、
"alt + command + R" でホイ
(同じファイル内のメソッドなら ctrl+1 => rename)

リーダブルコードにも書いてあった

リーダブルコードにも、
「ユーザの期待に合わせる」
という欄に書いてありました。

おそらく、他の言語でも同じでしょうかね。

レビューしてもらいやすいコード

ぼくはよく、

レビューしてもらいやすいコード

を書こうね、
と若いプログラマーに教えています。

一発で正確に動くコードを書けるようになる、ってのは当然みんな頑張ることではありますが、なかなか限度もあります。成長段階の若者であればなおさら。

なので、仮に間違ってたとしても、レビューしやすいコードだったら、誰か別の人が間違いに気付いてくれるかも。プルリクでコメントもらってそれで直るんなら、業務としては万々歳なわけです。

メソッド名で意図を表現するというのは、レビューで間違いを見つけてもらいやすくするテクニックの中の一つ

なんじゃないかなって思ってます。