先生にC++で書いたゲームのコードを見せたところ、Javaっぽい書き方していると言われました。
おそらく、1つのファイルにまとめすぎているのが原因だとは思います。
現在は先生が書いたコードを真似して直そうとしているのですが、C++の良い書き方、悪い書き方について教えていただけないでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/04/17 12:21
回答5件
0
ベストアンサー
C++でJavaっぽいコードというとむしろ褒め言葉のように感じるのは私だけなんでしょうか…
・if文のブロックが3重4重になっている
・文が横に長い
・コピペが多い
・関数を分割しきれていない
このあたりはJavaの特徴と合致するものではありません。
先生が何か先生の思うフィーリングみたいなものを言っただけかもしれません。
例えば昔、似たソースコードを見た…とか。
C++ のコーディングスタイルの話に関して言えば、私は以下のスライドで紹介されているJeff Bayの手法がかなり好きです。
http://www.slideshare.net/MoriharuOhzu/ss-14083300
全部実践する必要性は無いし、そもそも実践しようとしてもとてもしんどくて全部は無理なのですが、Jeff BayのObject Calisthenicsは私にコードの理想像を一つ教えてくれた気がします。
後は書籍リーダブルコードは良書です。
全部ここで伝えようとしても伝えきれないほどソースコードを綺麗に書くコツというのはたくさんあります。
まずはこういうところから見てみてもいいかもしれませんね。
投稿2015/04/17 14:48
編集2015/04/17 14:50総合スコア1591
0
1つのファイルにまとめすぎる、という点で言うとC++の場合、ヘッダファイル(.h)にクラスの宣言(定義も兼ねる)を書きますが、メンバ関数(Javaでいうメソッド)は宣言だけ書いておいて、実際の定義は別のファイル(.cppなど)に書きます。
ただ、セッター・ゲッターなどはクラス宣言の方に書くことが多いです。
lang
1ヘッダファイル(MyClass.h)に記述 2 3class MyClass { 4public: 5 // コンストラクタ 6 MyClass(); 7 // デストラクタ 8 ~MyClass(); 9 10 // セッター・ゲッター 11 void SetCount(int value) { 12 Count = value; 13 } 14 int GetCount(void) const { 15 return Count; 16 } 17 // 計算 18 int Calc(int x, int y); 19private: 20 // メンバ変数 21 int Count; 22 23} 24 25MyClass.cppに記述 26 27#include MyClass.h 28MyClass::MyClass() 29{ 30 // 初期化処理 31} 32MyClass::~MyClass() 33{ 34 // 後片付け 35} 36int MyClass::Calc(int x, int y) 37{ 38 int Ret = 0; 39 // xとYを使って計算 40 ... 41 return Ret; 42}
こんな感じで書くと体裁はJavaっぽくなくなります。
あとは、メンバ関数内でなにがしかオブジェクトを使う場合
lang
1MyObject obj1; // 1 2MyObject* obj2 = new MyObject(); // 2 3
と2種類の書き方ができます。
よほどサイズの大きいオブジェクトでなければ 1 の書き方で構わないと思いますが、サイズが大きい場合、2の書き方にしないと、メモリが不足してしまいビルドは成功しても実行時に不正終了したりします。
じゃあ2の書き方の方がいいか、というと、C++はnewしたものはどこかで確実にdeleteしないとメモリリークになりますので、スコープを抜ける際に自動で破棄してくれる1の書き方が楽ではあります。
逆に1の書き方をしている場合、スコープ外に出ると破棄されてしまうので、そうなっては困る場合には2の書き方をする必要があります。
このあたりの使い分けは慣れるしかないと思いますが、Javaとはだいぶ違うと思える部分です。
こんな感じでしょうか。
投稿2015/04/17 13:36
編集2015/04/17 13:37総合スコア3041
0
他の方からも回答されているので別の情報を。
GoogleのC++スタイルガイドは、C++でどう書くべきか理由も含めて詳しく書いてありますので一読を勧めます。
http://www.textdrop.net/google-styleguide-ja/cppguide.xml
投稿2015/04/21 04:16
総合スコア16
0
他の方の回答にもありますが、
1つのファイルにまとめすぎている
という特徴は「Javaっぽい」には合致しないと思います。
C++でもJavaでも、1ファイルが数千行というコードは何度も見たことがあります。
投稿2015/04/18 03:58
総合スコア9388
0
C++とJavaは兄弟みたいなものなのでそんなに違いが出るとは思わないのですが
Javaっぽい書き方ってなんなんでしょうね。
クラス名が無駄に長いとか・・・
ゲームだと、効率を重視するためにあんまりインスタンスを作らなかったり
newしないことがあるので、もしかしたらnewしまくってるとか。
投稿2015/04/17 13:28
総合スコア1293
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。