プログラミングの授業で、“冗長” や “誤り” と判定するプログラムのサンプルを集めました。
| 冗長な形 | 適切な形 |
|---|---|
一行の出力は、普通は一回の printf の呼び出しで済ませましょう。
| 冗長な形 | 適切な形 |
|---|---|
部分式のどこかが double にキャストされれば、
残りは暗黙的にキャストされます。
| 冗長な形 | 適切な形 |
|---|---|
関数 sqrt の戻り値の型はもともと void なのでキャストは必要ありません。
| 不適切な形 | 適切な形 |
|---|---|
説明しなくても、わかるでしょう。
| 冗長な形 | 適切な形 |
|---|---|
同じ(あるいは全く逆の)条件式を重複するのはよくありません。 条件を変更するときに 2 箇所を同時に変更する必要が出てきます。
| 冗長な形 | 適切な形 |
|---|---|
出力の一部だけが変わるなら printf の書式指定を使います。
| 冗長な形 | 適切な形 |
|---|---|
if と else に同じ処理があるならば、外に出すべきです。
| 冗長な形 | 適切な形 |
|---|---|
単純に else 以降は必要ありません。
| 冗長な形 | 適切な形 |
|---|---|
条件式を否定して if だけにします。
| 誤った形 | 正しい形 |
|---|---|
これは冗長なのではなく、明確に間違いです。
| 誤った形 | 正しい形 |
|---|---|
副作用のない条件式をコンマ演算子の左オペランドに使っても意味はありません。
| 冗長な形 | 適切な形 |
|---|---|
ブレースが多すぎます。
| 冗長な形 | 適切な形 |
|---|---|
これは単純に if 文は必要ありません。
if 文がなくても no が 0 以下のとき、.... は一度も実行されません。
| 冗長な形 | 適切な形 |
|---|---|
この場所では 0 <= i は常に成り立ちます。
| 冗長な形 | 適切な形 |
|---|---|
最初から i は 3 の倍数だけを動くように書くべきです。
| 冗長な形 | 適切な形 |
|---|---|
最初だけ、特別扱いするなら、ループの前に出すべきです。
| 冗長な形 | 適切な形 |
|---|---|
最後だけ特別扱いするなら、ループのあとに出すべきです。
| 不適切な形 | 適切な形 |
|---|---|
繰返しを制御する変数は for 文の丸括弧の内部で変更するべきです。 さもないと繰返しがわかりにくくなります。
| 冗長な形 | 適切な形 |
|---|---|
| 冗長な形 | 適切な形 |
|---|---|
ループの最後の continue はなくても同じです。
| 冗長な形 | 適切な形 |
|---|---|
ループ本体を実行しない可能性があるならば、 do 文ではなくて while 文または for 文を使うべきです。
| 誤った形 | 適切な形 |
|---|---|
これは冗長なのではなく、明確に間違いです。
v = v++ の動作は、同じ変数の値の変更の順序が不明確で未定義 (undefined) です。