バッドノウハウ

初心者に正しいことを教えるのが難しいのなら、とりあえずは「これはダメ」な事を教える方が簡単に思えてきたので、ちょくちょくと書いてみる。

1. インデントの無いプログラム

ダメな例
#include<stdio.h>
int main(void){
int i,j;
for(i=1;i<10;i++){
for(j=1;j<10;j++)
printf("%d ", i*j);
printf("\n");
}
return 0;
}
良い例
#include<stdio.h>
int main(void){
    int i,j;
    for(i=1;i<10;i++){
        for(j=1;j<10;j++)
            printf("%d ", i*j);
        printf("\n");
    }
    return 0;
}
理由

単純に見づらいため。
タブとスペース、どっちがいいかなんてどうでも良いので*1必ずインデントは付けること。

2.変数名が適当なプログラム

ダメな例
  • a,b,c,...と続く変数
  • hoge1, hoge2, などの連番
  • flagなど、抽象的な内容の名前
良い例
  • 一目見て何の役割の変数であるかが分かる名称
  • 本当に連番が必要なら配列化する
  • ローカル変数はそこまで長くなくても良い*2
  • flagはisXXXの形で何が真であるかをわかりやすくすればよい

3. 意味の無いコメント

悪い例
/* おまじない */
#include<stdio.h>

/* メイン関数 */
int main(void){
    /* ローカル変数。ループに使う */
    int i,j;
    /* 1から10までループ */
    for(i=1;i<10;i++){
        /* 1から10までループ */
        for(j=1;j<10;j++)
            printf("%d ", i*j);
        /* jのループが終わったとき改行 */
        printf("\n");
    }/* end for(i) */
    /* 関数が成功したので0を返す */
    return 0;
}
良い例
/* (必要であれば)作者名、プログラムの概要 */
#include<stdio.h>

/* 九九の表を標準出力するプログラム */
int main(void){
    int i,j;
    for(i=1;i<10;i++){
        for(j=1;j<10;j++){
            printf("%d ", i*j);
        }
        printf("\n");
    }
    return 0;
}
理由

いくらコメントを書こうが、全て無視される。
オマケに、コメントとプログラムの内容が一致している保証は全くない。
具体的な内容はプログラムに書き、概要や、本当に分かりづらいところにのみコメントを入れるべきである。
変数名を利用することでコメントを除去できる場合もある。
コメントとプログラムが同じ事を述べることは保証されないので、可能な限りコメントは書かない方がよい。その分、わかりやすいプログラミングを心がけること。

*1:言ってることはどっちもどっちだし、Tab->Spaceなら、正直一枚コンバータ噛ませれば終わるし

*2:プログラミング作法より。例えば、変数が1個しか無いときなどは、文字列名にsやstrを使っても問題無いと思っている。