#pragma twice

KAB-studio > プログラミング > #pragma twice > 120 Version 6.20 水希流コーディング&デバッグ術

#pragma twice 120 Version 6.20 水希流コーディング&デバッグ術

前のページへ 表紙・目次へ 次のページへ

 Version 6.20
水希流コーディング&デバッグ術

……なんかへんてこなタイトル付いてるけどぉ?
へんてこってゆーな。デバッグ編、ホントの最後はコーディングスタイル
とデバッグの仕方について
水希ちゃん流、ってのは?
こういうのって、基本的に本に載ってないから、みんな我流になっちゃう
んだよね。これもそのひとつってことで、参考程度で
でも参考程度って感じじゃないね……
そ、そう?
……なんかムカツクから質問する! まず!

    int i = 100;
    TRACE( "%d\n", i );

ってスペースがやたら多い理由は?
……くっついてると見にくいでしょ
それだけ?
それだけ
……次!

    TRACE
        ( "%d, %d, %d, %d\n"
        ,  0 && 0, 0 && 1, 1 && 0, 1 && 1 );

この妙な改行と , の付き方は? なんで

    TRACE( "%d, %d, %d, %d\n", 
        0 && 0, 0 && 1, 1 && 0, 1 && 1 );

ってしないの?
 , の方は、左から見ていった時に〈前の行から続いてる〉ってことがす
ぐ分かるように
左から見た時に?
そ。プログラムを見る時は当然左上から見ていくわけだから、そのときに
できるだけ流れを追いやすいようにね。 , が付いてれば、それだけですぐ
〈前の行から続いてる〉って分かるでしょ
確かに……
最初の ( の改行は、引数が2行以上になるときにそうすると、その , と
並んで綺麗になるから
そういえば水希ちゃんのプログラムって、綺麗に並んでたり対称的だった
りするよね
プログラムが見やすくする、それがバグを取り除く第一歩、って考えてる
からね
そういうもんなんだ。あ、対称的で思い出したけど

    for( int i = 0; i < 10; i++ )
    {
        TRACE( "%d ", ch );
        ch *= 10;
    }

って水希ちゃんはしてるけど

    for( int i = 0; i < 10; i++ ){
        TRACE( "%d ", ch );
        ch *= 10;
    }

っていうのも多いよね
僕の知る限りだと、僕のは少数派かも
でも水希ちゃんがそうする理由は?
これも , に似た理由かな、下の } から上の { を探す時、僕の方法なら
普通に { を探せばいいけど、そうじゃないと for か if か while かのど
れかでしょ
右端を見ていけばいいんじゃない?
インデントで追った方が早いでしょ
そりゃそうだ
僕がこういう対称的だったり整列してたりするのを好むのは、コードを
〈絵〉として見られるから
え? イラストとかグラフィックとかの絵?
そう。プログラムはもちろん文章だし、言語の構文もそういう文章として
考えられてるけど、僕は絵として見てるかな
絵、ねぇ……
絵として見ると、プログラムの全体構造が把握しやすくなるし、バグも見
つけやすくなるから
だいぶ違う?
打ち間違いしたとことかを〈なんか変〉って気付くことが多いかな。そこ
を良く見てみると
バグがあったと
ま、美しさばっかりこだわってても、ちゃんと動かなきゃ意味ないからほ
どほどにしないといけないけどね
それって〈この前〉愚痴ってた○○○○○○○○○ってヤツ?
……どこで聞いたかな
えーっと、あと

    int iUserDataNo = 100; 

この iUserDataNo みたく、長い変数名とか関数名多いよね
それはわざと。たとえば、画面上の横座標と縦座標の変数に

    int iX;
    int iY;

って、いうのは僕はまずしないかな
理由は?
タイプミス、つまり間違えちゃうのが怖いからね。 X と Y って両方とも
1文字だし、字も似てるから後から確認するときも見間違えること多そう
水希ちゃんなら?
僕なら

    int iHorizontalPos;
    int iVerticalPos;

とかかな。こうすれば、字はかなり違うから打ち間違いもしにくいし、間
違えてもうまくコンパイルエラーになったりするし、後からの確認も楽だ

……質問1、打つの大変じゃない?
〈今日の1分明日の1秒〉だし、 Visual C++ 6.0 には〈自動補完機能〉
が付いてるから
 Ver 6.02 ( No.102 ) でやったのだね
この例なら H か V まで書き込んでから補えばいいわけだからね
質問2、コピー&ペーストしたらそういうの関係なくない?
それはそう。違いが大きいから見比べやすい、くらいのメリットだね
ん? 開き直ってる?
そうじゃなくて、実はコピー&ペーストってのは魔物。簡単にできるから
ほいほいしちゃうけど、した後はじーっくりチェックしないとダメ
そだね、してみるといつの間にか必要な行がなくなってたりするもんね
基本は〈カット〉はしない、要らない部分はとりあえずコメントアウト、
とかかな。コピー&ペーストはバグの温床になりかねないからあまりしない
ようにね
便利だからつい使っちゃうけど
それが良くないかな。特に、コピー&ペーストをするときっていうのはプ
ログラムの量が無駄に増えるからね
増えちゃいけない?
よく増えるんならいいんだけど、たとえば元々あるプログラムがふたつも
みっつもあるとか
筋肉はいいけどぜい肉はダメってことね
そんなとこ。特にデバッグ時はね
どうして?
バグが見つかった時って慌てて色々しちゃうけど、そういうときはプログ
ラムにどんどん継ぎ足すんじゃなくて、削り落とすこと
要らない部分、ぜい肉を取り除くってこと?
そゆこと。ぜい肉を取り除くとバグがありそうな場所が減るわけだし
前に言ってた〈バグが起きる範囲を狭める〉ってのに似てるね
うん、それに近いかも。それにプログラムが小さくなれば全体が見渡せる
から
バグも見つけやすくなる!
バグが見つかったら削り時、って考えた方がいいかも。あ、でも、その前
にバックアップ取った方がいいかもね
バックアップ?
僕は、たとえば今回の Test ってプロジェクト名だったら、節目節目で

    Test_20010721a

ってフォルダごとコピーしてこういう名前付けるようにしてます
でも、これってサイズ大きくない?
あ、 Exe が作られるフォルダあるでしょ、 Debug とか Release 。この
中のものはビルドすれば作られるものだから、コピーするときに削除し
ちゃって大丈夫だよ
あ、そーなんだ。 .pch ってファイルがかなりでっかくて大変なのよね
でも、今は CD-R もあるしハードディスクも大きくて安い時代なんだか
ら、バックアップを〈もったいない〉って考えない方がいいかな
そういうもの?
そういうもの。たとえば、こういうバックアップ関係には diff ってツー
ルを使う方法もあります
 diff ?
 diff は different の diff 。前にコピーしたときとの差を取ってお
くって方法で、これだと取っておくファイルのサイズが少なくてすむんだよ

へー、前は便利なのあったのね
今もあるよ。っていうか VC に付いてるし。 Windiff っていうツールが
あるけど、まぁこれは違いを見る機能しかないのかな。でも僕は、この系統
のは勧めないかな
どして?
ウィンドウズプログラミングだと、普通のソースファイルだけじゃなく、
いろんなファイルが関係してくるからね。それにバージョン管理も面倒だ
し、それよりは丸ごと、かな
丸ごとねー。あ、質問。そのバックアップを取る〈節目節目〉って?
まず今言ったようなバグが見つかったとき。バグかと思ったら実は違って
いて、でも気付いたらプログラムがぐちゃぐちゃで元に戻せない、とか
あ、ありそう……
あと、安定して動いてるなー、と思ったら
? バグの正反対じゃない
そだね。これは、何かの拍子にバグが出た時に〈以前のバージョンなら
ちゃんと動いていたのか〉ってのを確認する時に使います
それでバグが出たらもっと前から出てるはず、とか?
そゆこと。出なかったらそこから作り直すとか、これとバグの出たのを比
較してどこがまずかったのか調べたりとか
つまり安定バージョンが〈正解〉になる、ってことね
まあそんなとこ。僕はたいがい1日に2〜4回はバックアップ取るかな。
その日最後にも必ず取るし
まめね……
っていうか、痛い目見たことあるし……
痛い目は嫌だ……
こういうのって、自分で痛みを感じないと分かんないから……
そうなんだ……って、今教えてること否定してるみたい
ま、だから今回はおまけ。やるもやらないも皆さんの自由、かな
最後の質問していい?
はい、火美ちゃん
こういうのって、水希ちゃんが思い付いたのなの?
ほとんどそうかも。 , とか長い変数名とかは他で見たことないし、まあ
バックアップはしてるとこあると思うけど、一応我流
どうしてそういうこと思い付くの?
んー、四六時中プログラミングのこと考えてるとね
あたし、確信した
……聞きたくないけど、なに?
水希ちゃんみたくはなりたくない!
ええ〜っ!?

/*
    Preview Next Story!
*/
ま、最後まで付き合ったげるけどね。次の7はなにするの?
最終的にはアニメーション!
ええっ!?
ダイアログを使って、ウィンドウズや MFC の仕組みに迫ります
面白そう! ってゆーかデバッグ編つまらなかったし!
や、やっぱし……
そこ、落ち込まない!
というわけで次回
< Version 7.01 描画してみよう! >
につづく!
でもはっきり言ってかなり色々教えるから覚悟してね
何をいまさら
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。