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 描画してみよう! >
『につづく!』
「でもはっきり言ってかなり色々教えるから覚悟してね」
『何をいまさら』