変化を抱擁せよ!

コメントして頂き、ありがとうございます。確かに、例題がよくなかったですね。そのおかげで文章も…。ちょっと反省しています。

デバッガの watch に式を入れれば表示が出来るのは知っています。時々は使いますから。それをやる事自体は苦ではないのですが、見たいときは一時(ひととき)というところがネックなのです。それを繰り返していると、どんどん watch に貯まっていくのです。そうすると消すのが面倒になります。仮に watch に入れずにその場で見るとしても、普段はマウスを使わないのでマウスに手を添えて範囲を指定する*1のが、おっくうなのです。
それに比べて、止まっている時点でのローカル変数やグローバル変数を表示するウィンドウは、何も操作しなくても見えます。表示数が多いとマウスでスクロールさせないといけませんが、その時はコード上にある変数にマウスカーソルを当てます、それぐらいなら、まだ我慢が出来ます。

「改行を入れる、もしくはコメントを入れる」ですが、人によってエディタの横幅が違うので、改行を入れ無い人が出てきます。私はどんなに画面が大きくても 90 列にしてますが、120 列の人なら入れないでしょう。コメントは、書いている本人が(その時)理解している事は書きません。先にコメントを書いてから式を書けばよいのでしょうが、(私は)なかなかやりません。あと、明確な条件を決めないとなりません。「式がいくつなら改行?」「 列数がいくつ以上なら改行?」 「どんな条件だとコメントを入れる?」などなど。 条件を考えるだけで疲れそうです。そして複雑な条件だと、守らない(覚えない)人が出てきます。

/* 
 * 例題1
 */
start.x = 10;
start.y = 10;
getPosition(now);

x = start.x + now.x;
y = start.y + now.y;

/* x と y の値が条件に合っていたら表示する */
if ((x > 20 && x < 100) && (y > 20 && y < 60)) {
     printf("hit");
}
/*
 * 例題2
 */
start.x = 10;
start.y = 10;
getPosition(now);

/* 条件に合っていたら表示する */
if (((start.x + now.x) > 20 && (start.x + now.x) < 100) &&
    ((start.y + now.y) > 30 && (start.y + now.y) < 60 ))) {
     printf("hit");
}

この場合はどうでしょう。 else とかで、比較が増えると、タイピングが増えますのでミスも増えてきます。コピーアンドペーストですか? 私はあまりしないです。脳にある事をキーボードに出力していると、その時は気がつかないからです。

/*
 * 例題3
 */
ret = 0;
a = 0;
b = 3;
start.x = 10;
start.y = 10;
getPosition(now);

/* check の値が条件に合っていたら表示する */
check = start + now;
if ((check.x > 20 && check.x < 100) &&
    (check.y > 10 && check.y < 60)) {
    a = 1;
    printf("hit");
} else {
    a = 2;
}

ret = a + b;

return (ret);

思いつきで書いてみました。恐らくほとんどの人が、 return(a + b) だとおもいます。私は引数を渡すときに、その中で計算するのが苦手です。だから、次のような事もダメなんです。

getPosition(x1 + x2, y1 + y2);

「x と y が hit しているか?」を計算したいと思うと、まず x を求めようとします。たしかに x1 + x2 は x と同じなのですが、初めに思いついたのが x なので、x の形にしようとします。「あーやっぱり x2 と x3 だった。」となったとき、比較している箇所まで手を加えないと行けませんし。

「その時が来たら考える」ではなく、「常にそのスタンスで書いて、変化があった場合に最小で済ます。」そういうことなんだと。

以上で、「一行に詰め込まない」理由は分かって貰えたでしょうか?

なんかおもしろくなってきたので、逆の複雑な式を判り易く見せる方法を考えてみます。

*1:指定してもみれなかったり、余分な箇所を選択する事があるので、 watch に登録して確実に表示させます。