はじめに
こんにちは、Qiitanのぬいぐるみが欲しくて参加したbockringです。私は過去に直すのがとぉ〜っても面倒なミスをしたので教訓というか戒めというか、と言った感じです。
ちなみにミスの舞台はArduino上で動作するOS。安直に「ArduOS」していました。
どんなミス
その時書いたコードはもう使ってないので出しませんけど(あまりにバグが多過ぎて1から作り直しています…笑)、変数でとんでもないミスをしたんですよね。変数のミスです。←え?w
私は英語は全然ダメ(スペルが本当に…)です。なのに数々の変数名をスペルミス続出するような名前にしたんです。
スペルミスその1
1つ目はdifferent
です。単に前回の処理との差分を処理するために一時キャッシュ的な変数です。単純にdiff0
,diff1
,diff2
…のように短くすれば良かったのに。fの数がズレたりeが抜けたり。直すの、しんどかったです。
スペルミスその2
次にcache
。まさかのここでもミスです。その1のものよりさらに下層のキャッシュ変数です。cache
がchache
になったりcashe
になったり… 英語を学ばねばっ!
演算子多用
これはスペルミスを直すより面倒でした。1回目に書いた時、何を血迷ったのか演算を分けたんですよね。確かにこれでバグは回避できるんですけど、流石に分けすぎってことですね。
変数型指定ミス
本当に終わってます。泣きそうです。これはコメントで気づいたので追加しましたが、まさかコメントでミスをするとは…(日常)
上記3つのミスを極端に合わせるとこうなります。
float value1;
long value2; //float型
int diffrent = 0; //diff"e"rent(スペルミス)
long cache = 1;
void setup () {
value = rondom(-10.00, 10.00); //value"1"(ID指定忘れ) r"a"ndom(スペルミス)
value2 = random(-10.00, 1000); //10"."00(小数点忘れ)
chache = value1 * value2 //;忘れ
diferent = value1 / value2; //dif"f"erent(スペルミス)
different = cache / different
}
void loop () {
delay(1000);
}
ちょっとこれは過激に書きましたが本当にこの調子です。酷いですね。最後のdelay(1000);
は無限ループの無処理回避なので気にしないでください。もっと綺麗にできますよね。演算だけ整えましょうか。
different = value1 * value2 / value1 * value2;
ちょっと1行が長くなろうとこっちの方が絶対にいいです。なんならcache
変数を無くせてスペルミスも減らせます(もしくは変数の総数を減らしてバイト数確保)。
おわりに+教訓
短いですがありがとうございました。これを書いていて自分でもミスが恥ずかしく思いました。それとともに自分を恐ろしく思ったり… ということで教訓です。
教訓
コードの行数は減らし、変数名は短く明確に。(←当たり前のことを言っているだけです)
これでコンパイル後の手直しも幾分が楽になります。
それではまた今度〜