2014/02/10

JavaプログラマがC/C++を使うにあたってぶつかる壁!

一応プロ-プログラマとして過ごしているので、使う言語がJavaからC/C++に移って感じたことを挙げてみる。

1.文字列がねぇ!

間違いなく最初の壁。std::stringというテンプレートはあるが入門書ではたぶん使わない。
JavaやJavaScriptなどに慣れているとCの文字列の扱いに本当に苦労する。
文字の配列しかない、つまり最初に最大文字数を考慮しないとダメ(これはかなり厄介)。
最後に「\0」を入れないとダメ(このせいでただでさえ厄介な文字数がさらにややこしくw)。
文字列を連結したいだけなのに関数呼ばないと出来ない。配列なので文字数の増加に厳しい。
不便過ぎ。Javaではノータイムで出来ていることについて1つ1つ引数が分かりずらい標準関数を呼ばないと出来ない。
(std::stringを使えば楽になるが、それはそれでイメージが分からなくて苦労すると思う)

2.命名規約。大文字小文字の慣例が分からない

大文字で始まる関数もあれば小文字で始まる関数もある。
boolとBOOLがある。
命名に関しては今でも全て理解したとは言い難い(大きく外すことも無いと思うが)。

3.ポインタが分からない

プログラム未経験者がぶつかるポインタの壁と違ってJavaを使えるなら参照が分かるし、Javaにもプリミティブ型と参照型というのが有るので概念はすぐ理解できるだろう。が、問題はそこじゃなく「&」とか「*」の使い方に慣れてないので困る。今はほぼ理解したと思うが、「void** 」とかは試してみるまで分かんないw。
そして何故かヒープ領域とスタック領域の違いは誰も教えてくれない。
ポインターについて参考

4.クラスを作るのにヘッダファイルと分ける意味が分からない

いや意味は分かったんだけど、めんどうだなと思う。
あと結構C/C++に慣れてる人がヘッダファイルにクラスの中身まで書いたりするよね。あれでまた混乱したりする。

5.なんか似たような型が沢山ある

boolとBOOL、charとCHAR、何でなのか未だにちゃんと理解していない。まぁVC++特有の定義が多いのかなと思うけど。charって書けば済む話なのにライブラリごとに独自の型の名前にしてる。コンパイラが変わっても大丈夫なようにそうなってると、ぼんやり理解していてもどうせWindowsしか相手にしないし、と思えば面倒なだけ。
一応boolは小文字、それ以外のプリミティブ型的なのは大文字定義の型を優先して使うようにしている。

6.GUIが作れない

新しい言語でGUIアプリを作れるようになるとテンション上がるから意外と重要。JavaのGUIは優れていると思う(NetBeansとか)。.Netなどを使わないでGUIを作ろうとするとウンザリする。
Qtを学ぶと面白いかも知れないが最初の一歩が難しいので結局Win32APIで良いかなとなる。
GUIアプリなら素直に.Net使えば良い。(Win32APIのGUIは他のGUIと違って超高速なので楽しいと言えば楽しい)。

7.やっぱり難しい

プリプロセッサで#ifdefで場合によってソースが変わる、とかマクロが展開される、とかはコードリーディング時に単純に脳のスタック領域を圧迫する。書く時にもマクロやtemplateを使いこなそう、作ってみよう、と思うと結局のところJavaよりかなり難しいというのが実感…。

8.VCが使い辛い

番外編。特に周りがEclipseを使っているのにVC6.0を使うよう言われた時はつらかった。こんなのテキストエディタじゃん・・と思った。(今はVC2010に拡張機能入れて快適になっている

逆にこれらだけクリアすればJavaもC/C++も大丈夫!

0 件のコメント:

コメントを投稿