読者です 読者をやめる 読者になる 読者になる

C++ よりも C# よりも Java でゲームを作ると良い 8 の理由と、悪いほうの 8 つの理由 (大嘘)

元ネタ:C++よりもC#でゲームを作るとよい8の理由と、悪いほうの8つの理由 - 【長剣は】最強武器候補【鈍器です】


注:この記事での JavaJava SE 6 を、C# .NET Framework 3.5 を、C++Visual Studio 2008 を想定しています。
最新の C# 4.0 や C++0x だと改善されているかもしれませんが、色々とお察しください。

1. enum が便利

C++C#enum は結局単なる整数ですが、Java ではオブジェクトとなります。

// Java
enum Sword {
    LONG,
    SHORT
}

valueOf メソッドを使うことで、文字列から enum への変換もでき、Sword.LONG.toString() のように、文字列にすることもできます。
その上、メソッドやフィールドとか持てちゃいます。なんかもうなんでもありです。
面倒なので詳しく知りたければ Java の enum - ぐるぐる〜 を読めばいいと思うよ。

2. Windows と同じバイナリが Mac や Linux でも動く

基本的には JVM さえあれば OK です。
CUI なら特にポーティング作業とか要らないんじゃないですかね?いや、知らんけど。

3. 低級関数・低級メソッドとおさらばできる

Commons 便利です。
C++ でも std::string とか Boost 使えばいいじゃん!って反論は受け付けます。
C#?自分で拡張メソッド書けばいいんじゃね?

4. Unicode でソースがかける

これ何が嬉しいんですかね?よくわかりません。

5. new しっぱなしでも問題ない・・・わけではない

メモリリークしちゃいますよ?GC あるから new しまくっても問題ないわけじゃないです。
Javaの理論と実践: 弱参照でメモリー・リークを塞ぐ とか読めばいいと思います。
あと、C++ では RAII というのがあってですね、メモリだけじゃなくて他の資源も明示的に close とかする必要ないです。
C# は IDisposable ありますけど、using と一緒に使わなきゃいけないのは面倒ですよね・・・

6. 型名のタイプを怠惰にできる

var が便利なのは認めます。var 超便利。
今の C++ だと typedef するしかないけど、C++0x だと auto とかあるらしいよ!
Java は・・・Java は・・・IDE あるからいいんですよ!(よくない

7. ツール作りが楽

ツールってなんですか?
あぁ、GUI ベースのツールですか。確かに C# は快適ですよね−。
でも CUI ベースのツールなら C++ より C# より Java より LL 使った方がげふんげふん。
つかツール作りってゲーム作りとはまったく別ですよね。ツールとゲームは切り離せるんだから、べつに無理して全部同じ言語で作る必要はないかと。
適材適所。

8. ヘッダファイルを書かなくて良い

代わりに interface をよく書きます。public な interface はそれだけで 1 ファイルを必要とします (C# の場合は強制ではないけど、この規約を採用してる人は多いはず)。
まぁ実装は複数あっても良いんですけど。
「あとヘッダに書いたのと同じ扱い」ではないですよね。どうでもいいですかそうですか。


あれ、Java の良いところを 8 つあげるんじゃなかったっけ?いつの間にか Java 完全に脇役ですね。
悪い方にも突っ込みどころはいくつかあるんですけど、なんかもう面倒なので以下略。