コーディング
STLなどの関数はきちんと考えられているというのを何かの本(Effective C++? / 101 rules?)で読んだ。
コンテナなどでは異なるコンテナに対して同じ関数で実装できるという設計らしい。
確かに1つのコンテナで覚えた場合(例: Add()やClear())、他のコンテナでも実装が早い。
学習コストも低くなる。
自分でクラスを設計する場合、Add()のような一般的な名前の関数にするのがいいのか、AddXXX()のようなユニークな名前の関数にするのがいいのか迷っている。
ソースリーディング
xxxList->Add();
上記のようなsnippetがある場合、それをどうやって検索するのか?
xxxListというキーワードは半年後には忘れているので、それを検索キーワードにはできない。
xxxList->AddDataPlotToGraph()
上記のような場合、AddDataPlotToGraph()はヘッダファイルを読めばわかる。検索でも探しやすい。
検索の流れ
AddDataPlotToGraph()の場合
- グラフへデータプロットしている処理の見直し開始
- 関連処理はGraphXXXでやっているというめぼしをつける
- GraphXXX.h の中に AddDataPlotToGraph()があるのを見つける
- AddDataPlotToGraph()で検索
- 関連処理が見つかる。
Add()の場合
- グラフへデータプロットしている処理の見直し開始
- 関連処理はGraphXXXでやっているというめぼしをつける
- GraphXXX.h の中に Add()があるのを見つける
- Add()で検索
- 関係ない処理含めて膨大な検索結果が見つかる。
どちらがいいか
まだ悩んでいる。
ユニークな関数名の場合、コーディング時にその関数名を記憶してないといけないかというと、最近のIntelliSenseや類似の入力補完機能を使えば解決する。
一方で、IDEを使わず大半がエディタで実装している場合は状況が変わるが、僕がよく使うSublimeTextの場合は1つでも関数が書かれていたら入力補完が効く。
ただし、ユニークな関数名は名前を考えるのに時間を取られるのと、ちょっとユニークな名前の場合、ソース数が40とかになってくるとそれらに同じ名前の関数がやはりできて、全然ユニークではなくなる。
フォルダ分けなど、別の仕組みを使うのも検討した方がいいのかもしれない。