バグ出した、ってわけでもないんだけど。ちょっと気になったコードがあったので。
amazon:Code Complete第2版〈上〉―完全なプログラミングを目指して曰く、
〜良いルーチン名のガイドラインより
■正確な反意語を使用する
反意語の命名規則を設けると、一貫性を保ちやすくなり、読みやすさにつながる。first/last のような反意語の組は、一般的に理解されている。それに対して、FileOpen() と _lclose のような反意語の組は対称的でなく、紛らわしい。
setter/getter なんかが良い例。必ずしも対応関係のあるメソッドばかりでもないけどさ。
で、今日見かけたのはこんなコード
hoge っていうのは何かしらのハードウェアリソースと思ってもらえればよいかと。で、ID をもらったあと、その ID 使ってリソースに何らかの処理を行うような感じ。
int getHogeId() { ... }
void releaseHoge(int hogeId) { ... }
コードには特に問題は無いといえば無いんだけど、どうにも違和感がある。
一つは get の反対は set だよな的 Java 出身特有?の先入観だと思う。これはまぁどうでもいい。
もう一つは、ネーミングに対応関係が無く感じること。get が「取得」なら対義は「設定」の意を持つメソッドが一番自然と思う。けど、上のコードだと「解放」的な意味を持つ release になっている。「解放」なら対応関係としては「束縛」とかがお似合いなんじゃないだろうか?
なによりこの get は「リソースを使用可能状態にする」的な意味であって「ID の取得」がしたいわけじゃない。「リソースを使用可能状態にする」をプログラムに落とし込むと「ID の取得」になるわけで、どうにもそのへんを表現するネーミングにしたほうがいい気がする。
というわけで release の同義・対義語を調べてみた。
Thesaurus - MSN Encarta
Synonyms for release(v) - antonym for release(v)
Synonyms: let go, free, discharge, liberate, let loose, leave go of, emancipate
Antonym: hold
Synonyms: make public, make available, announce, publish, circulate, issue, emit, publicize, distribute
Antonym: withhold
holdHoge/releaseHoge かぁ。うーん・・・イマイチな気が・・・。
openHoge/closeHoge とシンプルなほうがいいんだろうか。でも release という言葉の響きはちょっと捨てがたい・・・。publish も格好良いんだけどこれは何か違うし。openHogeDevice/closeHogeDevice とかがいいかなぁ?
アプリ全体でこのテのコードが get/relese で統一されてるならそれでもいいのかもしれんけどね。get/release はそうムチャに分かりにくいってわけでもないし。