変化を抱擁せよ!
コメントして頂き、ありがとうございます。確かに、例題がよくなかったですね。そのおかげで文章も…。ちょっと反省しています。
デバッガの 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 に登録して確実に表示させます。