• ベストアンサー

昔作ったプログラム

VC++にて趣味でプログラムを作ってましたが、最近ずっと触ってませんでした。 久々に改良してみようと思ったのですが、 コードが単純に上から下へ流れてなく、並列に存在してます。 (しばらく遠ざかっていたので言葉を思い出せません) まあ、最近のちょっと複雑なプログラムは何でも沿うでしょうが。 作る時は集中してるので、どうにかなったのですが、しばらくすると、どの変数がどこにどう影響してるかまったく分かりません。 皆さんはこんなことが起きないように、コードの流れや変数の意味をちゃんと書きとめておくのでしょうか? 後から見ても分かりやすいプログラムの作り方のコツなどというものがあれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • K-1
  • ベストアンサー率21% (832/3844)
回答No.1

「後から見ても分かりやすいプログラム」 これは、情報処理の研究テーマでもあるほど難しい問題なんですよ。 こうすれば完璧!という手法はまだないのでは。 とりあえず、自分がやっている方法は、 ・コメントを書く。  くどいほどに。処理の切れ目切れ目にコメントをいれます。  関数などは、処理内容まで書きます。 ・変数名や関数名はわかりやすく。  多少長くなっても用途がわかりやすい名前に。 ・グローバル変数は避ける。  どこからでもアクセスできるから、いつどこで変化したかつかみにくくなる。 ・ネストは3段まで。  好みの問題ですが。  これ以上深くなると見づらいですし、処理がややこしくなります。 基本といえば基本です。

VitaminBB
質問者

お礼

回答ありがとうございます。 教えていただいたことは、確かに基本ですよね。 でも、この基本を守っても後から見るとどうしようもなく複雑になってる気がするのです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

「いいプログラム」というと、人により考え方が色々で難しいですが、 「悪いプログラム」というと、ほとんどの人は共通の意識をもっていると思います。 なので、反面教師として悪いプログラムや禁じ手なんかを見てください。ただし、どうして悪いのかが理解できなければ意味がありませんが・・・ http://www.pro.or.jp/~fuji/mybooks/cdiag/ http://www.cmagazine.jp/src/kinjite/c/index.html >コードが単純に上から下へ流れてなく、並列に存在してます。 これは、「イベントドリブン」か、「マルチスレッド」でしょうね。

VitaminBB
質問者

お礼

あっ taka_tetsuさんだ。こんにちは、お久しぶりです。 昔あれほどお世話になりましたが、ちょっと興味が薄れ遠ざかってます。 冬休みにまた挑戦しようかなって思ってます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 他人が作ったプログラムのメンテナンス方法

    他人が作った、VisualBasicで開発されたスタンドアロンの会員管理アプリケーションソフトを、メンテナンス&カスタマイズすることになりました。 良くあることなのですが、その作った張本人は、退社して連絡が取れません。仕様書類は、一切なく、変数名管理表、フローチャート等は、当然、一切ありません。おまけに、コードには、一切コメントがありません。 上司と顧客のカスタマイズ要求も的を得ず、私自身の改良案も思いつかず、 コードの一部をいじくると全体にどんな影響がでるか分からず、手の出しようがありません。 とりあえず、今は、何らかのプログラムの流れが分かる図を書き起こそうと 思うのですが、どのような図を書き起こせば良いか分かりません。 また、私の実力では、何図といわれても、すぐに書き上げるだけの実力がありません。 とにかく、イベントドリブン型のVBのコードでは、上から下へ、素直に、イベントプロシージャ、サブプロシージャが記述されておらず、コードの判読に大変な時間がかかる上に、なかなか、理解できません。 どなたか、良い解決方法に限定せず、ご自身の経験談でも、よいので、回答いただける幸いです。宜しくお願いします。

  • VBとVC++を両方使うプログラム(VS2008)

    VBとVC++を両方使うプログラムのデバッグなんですが、VBとVC++を両方使って作ったプログラム全体を一つのソリューションにまとめて統合環境で動かしてデバッグしたいです。VS2008でVBとVC++を両方使うプログラムの作り方をサンプル付で説明した本はありませんでしょうか? MSDN読んでもさっぱりわかりません。アンマネージかマネージかアクティブXかというと、dllのほうは基本的にOpenGL使うためなので当面はアンマネージでいいかも。でも今後はマネージドになっていくのでしょう。 VB6/VC6の頃はVC++でdllを作ってVBから呼び出してましたが、デバッグのときにdll側にバグがあるとVB側からどういうデータが来ていたのかわからずに苦労していました。まとめて動かして変数の値を追えれば便利です。 無理せず一つの言語でやれといわれそうですが、やはりVCの方が速度は速いし何よりも両方使えれば両方のサンプルコードが使えるので便利だし、何よりC++を使わないと上達しないのでやるしかありません。そんなわけでよろしくお願いします。

  • VS2017を使った簡単なプログラムについて

    現在、VS2017(Visual Studio 2017 Professional)を使って、下のプログラムに示す簡単な計算をするダイアログベースのプログラムを作っています。 プログラムの流れとしては (1):[ + ]ボタンを押して2つの数値(エディトボックス1と2の値)の和を求めバッファに代入する。 (2):[ = ]ボタンを押してバッファの値をエディトボックス3に表示する。 という流れです。 (1)は動作したのですが、(2)のところでうまく表示されません。どうしたらよいでしょうか。教えてください。 以下に示すプログラムが和を求める部分とエディトボックスに表示させる部分です 変数zは外部で定義してあります。 ========▼以下プログラム============ void CMFCApplication2Dlg::OnBnClickedPlus() { // TODO: ここにコントロール通知ハンドラー コードを追加します。 double x, y; //IDC_EDIT1に入力された値を変数m_strXに代入 GetDlgItemText(IDC_EDIT1, m_strX); //IDC_EDIT2に入力された値を変数m_strYに代入 GetDlgItemText(IDC_EDIT2, m_strY); //それぞれ文字列をdouble型に変換 x = _ttof(m_strX); y = _ttof(m_strY); //和を求めて、変数zに代入 z = x + y; } void CMFCApplication2Dlg::OnBnClickedEqual() { // TODO: ここにコントロール通知ハンドラー コードを追加します。 WCHAR strAns[256]; //zを文字列に変換 wsprintf(strAns,_T("%4.3f"),z); //文字列をIDC_EDIT3に代入 SetDlgItemText(IDC_EDIT3,strAns); }

  • makeについて(FORTRAN)

    FORTRANでのプログラムについて質問させてください。 現在、一つのコードにsubroutineをいくつかまとめて、 計算を走らせています。 subroutineとmain programでの共有変数は、全て common/変数、変数/としているのですが、プログラムが複雑化するとこれでは計算速度が落ちるのでしょうか。 そこで、subroutine毎にコードを分けて、makeを使用してmakefileを作った方が、圧倒的に計算速度も作業効率も上がるのかどうか教えてください。

  • 必要な変数について

    プログラム初心者です。 現在他の人が書いたプログラムを読む練習をしています。 ひとつだけコツをどなたかに教えていただきたいです。 それぞれのプログラムの中で、もしくはプログラム(ファイル)で書かれているある一部の処理の中で、 どういうものを変数として用意し、流れを書いていくかというコツがあれば教えてください。 感覚的なこと、慣れだと思うのですが。 "プログラムの処理の中で必要な値、パラメータを変数として挙げてみる" "算数でよく使うx+y=10のように一般式を作るような感じで考えてみる" Webで検索するといろいろなヒントがあるのですが。。 ただモヤモヤした感覚のままで、コツが掴めていません。 よろしくお願いします。

  • HSPで見通しのよいプログラムを書く方法

    少し前に趣味でプログラムを始めた者です。 C言語も多少触れましたが、今は基本的にHSPを使っています。 HSPに限ったことではないのですが、 「長いプログラムになったとき、どのようにすれば見通しのよいプログラムが書けるか」 ということを疑問に思いました テトリスゲームを作る。ということを例にしてみます。 1.ブロック(7種類)の生成 2.だんだん下に落下してくる 3.同時に、キーボードからの操作を受けつける 4.ブロックが地面に達するor他のブロックに触れたら、停止する 5.消滅する列があるかどうか判定し、あれば消滅させる 6.1に戻る 大雑把に書けば、こういう流れになってると思います。 この程度のプログラムであれば特に何も意識しなくてもいいと思うのですが、 もっと複雑なものになってくると、 1~6のようなプログラムの流れが、見えにくくなってくるように思います。 自分なりに調べた結果、商業用など、本格的なソフトウェア開発の場では、 メインプログラムは、全体の流れ(上記1~6のような流れ)が見えやすいように、非常に完結に。 そして、各種細かい動作(上記1、2、3、4、5、6の、各々)は別途(別ファイルに?)に用意すると聞きました。 確かに、これであれば複数人でソフトを開発するときも、 役割の分担がやりやすくていいと思います。 しかし、実際にどのようにして、このように書けばいいのかが良く分かりません。 HSPになぞらえて、やり方をご教授お願いします。

  • ユーザー環境変数の一覧

    システム環境変数とログインしている環境変数それと、 存在する全てのユーザーに対する環境変数を取得するプログラムをC言語作成したいのですが、どうすればよいのでしょうか? OSはWindows2000です。 言語は問いません、VC++2005かC#かVB.NETのどれでも構いません。

  • 基本情報処理 プログラムの全体像の把握方法

    問題を解くにはまずプログラムの全体の流れを抑えると思いますが、 具体的にどのようにされていますでしょうか。 自分の取り組み方として、問題文から何を どうしたいのかを確認します。 そこから、どのような流れになるか想像します。 例えば、Aファイルからレコードを取り出し、そのレコードの データを書きかえて、Bファイルに登録する場合は以下のように 考えます。  (1)Aファイルのオープン  (2)Aファイルからレコードを読む  (3)該当するレコードに対し、書き換え処理を行う  (4)処理したレコードをBファイルに書き込む ただ、この流れを想定して問題のプログラムを見たとき、 なぜ、このようなことをしているのか? という不明点がでてきます。 すると、全体にどのような影響があるか解らなくなり、 全体像が把握しきれなくなります。 例えば、上記の不明点が変数に値を代入していて、 別の箇所でもその変数を使用している場合、 何をしているかがわからなくなり、 お手上げ状態になってしまいます。 みなさんのプログラムに対する全体象のとらえ方や、 上記のような状態になったとき、どのような対処を しているかを教えていただけないでしょうか。 ちなみにCASLを勉強しています。 (CASLに変数はありませんが、例として記述させていただきました)

  • 【Java】参照型で宣言された変数名の抽出

    現在、Javaを学習中の大学生です。 Javaのソースコードを解析し、その中で宣言されている変数名を抽出して、 変数表のようなものを作成するJavaプログラムを書いているのですが、 参照型(クラス型)で宣言されている変数名を抽出する方法が思いつきません。 よろしければ、何かアイディアをいただけないでしょうか。 プリミティブ型の変数については、StreamTokenizerクラスを利用しています。 コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出 するという、単純な方法を使っています。こちらも、改良すべき点などあれば、 アドバイスいただけるとありがたいです。 デバッガを使えば出来ないことはないようですが、 出来ればデバッガは使わない方法でお願いします。

    • ベストアンサー
    • Java
  • VC++2005でコードの再フォーマットのような機能

    最近、VBからVC++2005へ移行しました。 "コードの再フォーマット"というのはVB固有のものらしいのですが、VC++2005にも同様(または類似)の機能はあるのでしょうか? 具体的には ・変数やオブジェクトの大文字と小文字の修正 ・文字の間隔の自動調整 などを行える機能を探しています。 よろしくお願いします。

このQ&Aのポイント
  • デスクトップC530を使用していますが、電源長押しをしないとPCが起動しなくなりました。
  • 最近までは電源ボタンを1度押すとすぐに立ち上がっていましたが、今は10秒くらい電源を押した状態を維持しないとWindowsが立ち上がりません。
  • 原因がわかる方、いらっしゃいませんか?
回答を見る