• 締切済み

良いプログラムとは?

はじめまして 自分はC++の基礎(入門的な)部分 構造体、ポインタ、関数、ファイル入力は 理解したのですが良いプログラム (処理時間、容量の短縮、見やすいプログラムなど) が分からないので (分かることがあるとすれば演算子の処理を少なく するとかポインタを使うとか・・^^;) こんな初心者にできれば具体的な 良いプログラムの基本的な書き方を 教えてください・・ 宜しくお願いします。

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.7

初心者向けのアドバイスをしておきます。 プログラミングの学び始めでは、正しく、安定して動かすことを最優先してください。 おそらく、おぞましいほど汚いコードになるかもしれませんが、それでも構いません。汚いコードを書いてしまうと、正しく、安定して動かすことも、機能を追加するなどの修正を行うことも大変です。そのことを、身をもって体験してください。 成功の経験は大して役に立ちませんが、失敗の経験は大いに役に立ちますから。 どんな書き方をすれば、どんな動作になるかもその過程でつかんでください。例えば、例外処理を熟知することは効率の良いコードを書く上で不可欠ですが、効率以前に例外処理を正しく把握していないと、安定性の高いプログラミングは不可能です。 クラスもテンプレートも知らなくてもよいので、早い段階で例外処理だけは押さえることを強くお勧めします。 他には、汎整数昇格など、細かい動作を把握できるようになれば、ソースコードを見るだけで動作が把握できるようになります。 分からない言葉も多いと思いますが、Googleなどで検索してみてください。検索のためのキーワードを盛り込んでアドバイスしたつもりです。 プログラムをまともに動かせないのに、ソースコードの見た目にだけこだわっても無意味です。料理に例えれば、味や衛生面より、盛り付けを重視するようなものです。

  • ency
  • ベストアンサー率39% (93/238)
回答No.6

私が気をつけていることは、こんな感じですかねぇ。 1. 無駄なコメントはつけない。 2. ひとまとまりの処理は、関数にする。 3. 誰が見てもわかるような変数名、関数名をつける。 4. 必要なデータの洗出しをしっかり行う。 1 については、No4 で jacta さんもおっしゃっているように、無駄なコメントはソースを見にくくするだけです。 コードだけで何をやっているのかがわかるようなコーディングをするように心がけてください。 また、無駄なコメントは時間が経つと、たいていウソになります。 # コードの修正後、コメントの修正を後回しにしてしまうことはよくあります。 # ここでいう「ウソ」とはそういう意味です。 2 については、「ここからここまではこんな処理」という「ひとまとまりの処理」が必ずあると思います。 その部分を一つの関数にしてしまうのです。 たとえ、一度しかコールされないような処理でも、関数にしてしまいましょう。 # 関数に分割するメリットはもう一つあります。 # 引数、戻り値を考えることで、その部分の処理内容を再度整理することが # できます。 # あと、必要のない変数を関数内に局所化できるのも大きなメリットです。 3 については、初心者の方はわりと軽視されているように思います。 変数名として安易に「a」とか「bbb」とかつけていませんか。 for ループのカウンタに「i」とか「j」とかつけていませんか。 多少変数名が長くなっても、わかりやすい変数名をつけることで、それまで必要だったコメントが必要なくなることも多いものです。 関数名も同様ですね。 ちなみに、私は、変数→「名詞」、関数→「動詞」という感じで名前をつけるようにしています。 4 については、初心者に限らず軽視している人が不思議と多いことに最近気づきました。 処理の修正よりも、データ構造の修正の方が、後々の修正インパクトは大きいです。 [データ構造]  C なら構造体、C++ ならクラスにまとめてしまうことが多いですよね。 あと、マジックナンバーは使わずマクロ or ENUM 値を使う、といったところは、あえて言う必要はないと思います。 # No4 jacta さんは、マクロすら使わないほうが良いということですが、 # C++ ならそれも可能だと聞いたことがあります。 # ただ、C だと使わざるを得ないことが。。。 少々長くなってしまいましたが、こんなところでしょうか。

noname#183335
noname#183335
回答No.5

あくまで初心者向けのアドバイスですが、 >構造体、ポインタ、関数、ファイル入力は >理解したのですが このレベルであれば、ずばり「見やすいプログラム」に専念していいと思います。早くて小さくても読みづらいプログラムは改良しにくいですが、遅くて大きくても読みやすいプログラムは後から問題点の修正がしやすくなります。 プログラムを書く際は、 1、まずはわかりやすく書く 2、パフォーマンス、サイズなどを測定する 3、要求に合うようにチューンアップする という順序で考えるのが良いと思います。 まずは構造化プログラミング、グローバル変数を使わない、変数名、関数名をわかりやすくする、クラス化するなどいろいろありますが、一番いいのは人に見てもらうことです。自分がどんなにわかりやすく書いたつもりでも、ほかの人にわからなければ仕方ないですから。 近くにプログラムを見て意見を言ってくれそうな人がいない場合は、逆にほかの人のプログラムを見ることをオススメします。オープンソースのプログラムはいくらでもありますので、マネするのが(時には反面教師もあるかも)いいと思います。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

まず、見やすいソースコードの書き方ですが、以前にもどこかで回答した記憶があるのですが、コメントを一切使わずに、コードのみで理解できる書き方の訓練をすることが効果的です。十分に訓練が出来た後は、必要にお応じて適切にコメントを入れればよいかと思います。 もう一点挙げると、ソースコードから極力マクロを排除してください。定数値も、マクロではなく、列挙体やconstオブジェクトにしてください。 他にもいろいろありますが、ここに書ききることはできません。 プログラムサイズを小さくする方法ですが、一番効果的なのは、例外処理について深く学習することです。C++において、プログラムサイズを増大させる一番の要因は例外処理に関わるものです。 また、仮想関数を極力排除するようにしてください。仮想関数を使うと、実際に呼び出すかどうかに関わらず、全部の仮想関数がリンクされてしまいます。 さらに、ライブラリを作成する場合、出来るだけ関数ごとにファイルを分割するようにしてください。こうすることで、実際に呼び出されない関数はリンクされなくなります。 速いプログラムを書く方法ですが、まずはアルゴリズムを最適化することを考えてください。ただし、凝ったアルゴリズムを使えば、それだけソースコードは読みにくくなります。 次に、特にアプリケーションの場合には、プログラム全体の足を引っ張っている部分は限られていますので、その部分を見つけ出して最適化を図ってください。 最後に、ライブラリ開発の場合は、出来る限りあらゆる箇所の最適化を試みてください。ライブラリは、アプリケーションとは事情が異なります。 具体的なコードの最適化については、アセンブラを学習するようにしてください。コンパイラの出力結果を把握しないと、効果的な最適化はできません。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

良いソースコードではなく、良いプログラムということでよろしいでしょうか?以下、そう解釈して回答します。 良いプログラムは、正しく動作し、性能が高く(速くて小さい)、安定しているものです。 どんなに美しいソースコードを書いても、どんなにハイセンスな設計技法を用いても、ユーザーには何の関係もありませんから。

dirav_syana
質問者

お礼

お返事有難う御座います^^ 何分独学なもので参考書にも 書かれてないので苦労してます^^; あ、それですみません・・ 今の自分レベルで「見やすい容量の少ない良いプログラム」「見やすい処理の速いプログラム」の2通り を意識してこれから作っていきたいと 思っているのですけどどのような事に 注意していけば宜しいでしょうか・・ 自分が分かる事といえば関数を極力使うとか 見やすいように#defineで定義するとかしか知りませんのでどうかjactaさん教えていただけないでしょうか・・ 宜しくお願いします。

  • 2531kbps
  • ベストアンサー率13% (183/1333)
回答No.2

作成時間・安定性・実行速度・メモリ消費量・バイナリの大きさ・メンテナンス等、なにを重要視するかで決まります。 見やすさも確かに大事ですが、マイクロ秒単位で動作を管理するような厳しい条件の場合、コードをマシン語で書くのでこれは非常に見にくいです。この場合、システムや運用方法によってはパッチを当てるのも大変です。

dirav_syana
質問者

お礼

お返事有難う御座います^^ 自分今独学でなんとか理解したのですけど 良いプログラム悪いプログラムというのが全然 分かりませんでした^^; これからはそういった事を意識して作っていこう と思っているのですけど、すみません・・ 今のレベルで「見やすくて容量の少ないプログラム」 見やすくて処理の速いプログラム」を意識して作っていきたいのですけどどのように意識して作っていけば 宜しいでしょうか・・ 自分が分かる事といえば関数を極力使うとか 見やすいように#defineで定義するとかしか知りませんので・・^^; どうか宜しくお願いします。

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

よいという基準が人それぞれなので、一概にこうとは言えませんが。 初心者の方でしたら、まず ・コメントを書く ・インデント(字下げ)を適切に ・GOTO文を使わない(構造化プログラミング) あたりから始めて ・メモリ消費量を少なく ・高速化 プロ近くなると ・部品化(クラスライブラリ化)を薦める ->生産性の向上 あたりでしょうか。参考URLのあたりも参考に。

参考URL:
http://www.media.osaka-cu.ac.jp/~k-abe/2001-JS-OSAKA-U/8.html
dirav_syana
質問者

お礼

お返事有難う御座います^^ URL拝見しました^^ 初心者の自分にはとても分かりやすかったです。 あ、それですみません・・ 今まだ自分は初心者なのですけどどうしても 今のレベルで「見やすく処理の速いプログラム」 「見やすい容量の小さいプログラム」の2通りを 意識して作っていきたいのですけど どのように意識して作っていけば宜しいでしょうか・・。自分が分かる事といえば関数を極力使うとか 見やすいように#defineで定義するとかしか知りませんのでどうか教えてください・・ 宜しくお願いします。

関連するQ&A