kagamihogeの日記

kagamihogeの日記です。

メソッドに対応関係を持たせる

バグ出した、ってわけでもないんだけど。ちょっと気になったコードがあったので。

amazon:Code Complete第2版〈上〉―完全なプログラミングを目指して曰く、

〜良いルーチン名のガイドラインより
■正確な反意語を使用する
反意語の命名規則を設けると、一貫性を保ちやすくなり、読みやすさにつながる。first/last のような反意語の組は、一般的に理解されている。それに対して、FileOpen() と _lclose のような反意語の組は対称的でなく、紛らわしい。

setter/getter なんかが良い例。必ずしも対応関係のあるメソッドばかりでもないけどさ。

で、今日見かけたのはこんなコード


int getHogeId() { ... }
void releaseHoge(int hogeId) { ... }
hoge っていうのは何かしらのハードウェアリソースと思ってもらえればよいかと。で、ID をもらったあと、その ID 使ってリソースに何らかの処理を行うような感じ。

コードには特に問題は無いといえば無いんだけど、どうにも違和感がある。

一つは 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 はそうムチャに分かりにくいってわけでもないし。