🍣
Getで始まる名前を関数につける前に読む記事
今すぐ名前を考え直してほしい。参考までに、自分が普段使っている単語を列挙しておく。経験上、これぐらいあればどれかが当てはまるだろう。
関数の性質 | 候補 |
---|---|
外部のサービスを呼び出す | fetch, retrieve |
dictionaryやmapから読み出す | lookup |
簡単な計算をする | calculate |
複雑な計算をする | compute |
探索または検索をする | find, search |
(引数やフィールドから)新しいもの(文字列、URLなど)を作る | build, compose, craft |
privateなフィールドをほぼそのまま返す | get |
自分は英語ネイティブではないので、ニュアンスが若干間違っているかもしれない。致命的な間違いがあれば指摘していただけるとありがたい。
なぜGetで始まる名前をつけてはいけないのか
コードを読む人にほぼ何も情報をしないからだ。さらに悪いことに、getterと混同させてしまうおそれもある。
例えば、商品のIDを受け取って、商品名を返す関数 getItemName(int id)
があったとしよう。次のコードはどれぐらい時間がかかるだろうか。
for (int i = 0; i < 100; i++) {
getItemName(i);
}
当然、getItemName
の速さによって実行時間は変わる。getItemName
がハッシュマップから名前を読み出しているだけであれば一瞬で終わる。しかし、REST APIなどを呼んでいて1回あたり100ミリ秒程度がかかるのであれば10秒ほどかかる。
もし、上のコードが
for (int i = 0; i < 100; i++) {
fetchItemName(i);
}
であったならば、経験を積んだプログラマーであればすぐに「怪しいな」と思うだろう。fetchには取りに行くという意味があり、ネットワーク通信を行う有名なAPIの名前にもなっている。
Discussion