休業日なのでコラム的なヤツです。
発想の発端
すえなみさんの以下のツイートから
getter議論収束しつつあるけど、ひとつ言いたいのは、getXxxというメソッド名はgetter自動生成みたいな歴史もあって基本的に内部保持してるものをそのまま返す(そうじゃなかったとしても計算コストが十分に低い)という印象を与えるのでメソッド名をつける的には気をつけたほうがいいとは思う。
— 1985(昭和60)年生まれ 丑年 (@a_suenami) September 20, 2019
経験値より
自分自身もココには思うところがあって
- getなんちゃらというものは値を取得するものだから計算やDBアクセスは伴わない
- 処理が重くなるようなものはgetとつけるとミスリードが多いからやらない
というのが潜在意識にある。
この意識付けの源流
この意識付けを生んだのはゲームプログラミングを行っているときで、基本的にゲームはゲームループの処理を以下に軽くして処理落ちをさせないかが肝になるので、getHogeHogeのようなメソッドでめちゃくちゃ思い処理をされると読み違えの種になる。
そのため、重い処理や計算処理にはふさわしい名前をつけるべきという考えを埋め込まれた、という流れである。
この話を紐解いていくと、やはり、「getという名のつくものはメンバ変数を参照することが期待値としてあるので、それを外れるものは容易すべきではない」ということだとは思う。
追記
ちょっと自分でもわかりにくい文章書いちゃったなと思い、下記ご指摘を頂きました
もちろん重い計算/DBアクセスとかがいわゆるGetterと同じメソッド名だと困るというのは同意ですが、だからといってメンバ変数にある必要があるというのは論が飛躍しているというのが僕の見解です。
— qsona (@qsona) September 23, 2019
そこに対するアンサーとしても書いたのですが
自分のブログ記事が乱暴だった部分があるんですが「get接頭辞のメソッドはgetterが源流にあるので、その流れを汲み取ると重い処理をそこに書くと思わぬ認識ズレを生むのであんまりおすすめしない」ぐらいのお気持ちでした。なので概ねqsonaさんの見解とはそこまでズレてないと思ってます
— しんくう (@shinkuFencer) September 23, 2019
という感じで、あくまでも「getXXXはgetterの文脈から軽い処理であることが期待されがちだし、そこの期待値を離れると大概よくないことになりがち」という気持ちから来ているお話でした。