C++修行中
特に深い理由もなく(本当はちょっとあるけど、書く程のことでもない)C++の勉強をしている。前に他人のC++ソース(といってもほとんどCのような感じ)を読まなくてはいけないことがあって、少し勉強したもののすこぶる中途半端だったので、再度勉強しはじめたわけだ。で、こないだ作ったBFM(http://members.jcom.home.ne.jp/j-klein/software/bfm/)が処女作だったというわけ。
いろいろ勉強して思ったことは『コーディング規約無しで、適当に書いたら絶対まずいことになる』ということ。当たり前ではあるんだけど、他の言語以上に自由度と破壊力がある。具体的に言うなら『暗黙の◯◯』というのが、深い落し穴の入口に見える。
#includeclass HogeClass { private: int value; public: HogeClass(int val) : value(val) {} operator int() const {return value;} }; int main(int argc, char *argv[]) { HogeClass hogeInstance = 10; printf("HogeClass -> %d?n", (int)hogeInstance); if (hogeInstance == 10) printf("hogeInstance is 10?n"); return 1; }
こういうのに馴染めない。さすがに文字列を表すクラスなどは'string str = "hoge";'というのは有りだと思うのだけど、あんまりそれ以外のものを見たくない。Cしか分からない人はHogeClassを構造体だと思えば、気持ち悪さを理解してもらえるかな?
1人で開発する限りはJavaで出来ないことはC++でもやらない方針が良いような気がした。もちろん100%ではないけど、出来る限り明示的なコーディングをすべきだということ。"=="をオーバーロードしたり、暗黙の型変換を利用して、以下の例(1)のようなやりたかをするよりも例(2)のほうが分かりやすいと思うし、間違いが少そう。
// 例(1) if (instance1 == instance2) { ... } // 例(2) if (instance1.equals(instance2)) { ... }
でもね、なぜか燃えるんだよねC++って。書いてて楽しかった(1つしかソフトウェアを書いてないけど)。奥が深い症候群? かもね。