アカウント名:
パスワード:
・移植性が低いか、ほとんどない。・再利用できない関数が大量にある。・switch文の中に5case以上書かれている。・プログラムがどう動いているかを説明できるのが書いた当人だけ。
納期で叩かれたら、どんな名プログラマでもクソコードを吐くだろうと思っています。
switch文の中に5case以上書かれている。
いや、必要であればむしろswitch文で書いてくれないと困りますが。(全部if~elseとか)酷く見えるのは処理の分割(後述)がされていないからでしょう。
switch文の使い方でなんとかしたいのは
この辺でしょうか。
一般的には多重ネストや分岐後の処理がどうしても長くなるなら、関数に分けるなどすべきです。# 関数呼び出しのオーバヘッドとかを気にしないといけないような場合は除く。
分岐後の処理がやたらと長い場合、処理の分割がまともに出来ていない(していない)ことが多いですね。
分岐の条件が考えられていないパターンswitch (hoge){ case 1: if (foo > bar) { <処理> } break ; case 2: if (bar == baz) { <処理> } break ;}コードの例としてはいい加減ですので、感覚だけ掴んで貰えれば……。switchで分岐した後にさらに条件分岐している場合、条件比較の順序から見直しを行うと簡潔になることが多いですね。# 上記例の場合、foo,bar,bazの比較をswitch文の前に持っきて、その結果を格納して使うなど
あとコピペを多用する人によく見られるのが以下の形。switch (hoge){case: 1 a = aa ; <変数aを使った処理10> ― (1) break ;case: 2 a = ab ; < (1)とほぼ、あるいは全く同じ> break ;...case: 26 a = az ; < (1)とほぼ、あるいは全く同じ> break ;}
あと、こんなのもみたことが。switch (hoge){case: 1 <処理> ― (1) break ;case: 2 < (1)と全く同じ> break ;...case: 26 <処理> ― (2) break ;}
既存のコードに手を入れることが必要以上に禁止されている現場で、歪な条件分岐を見る機会が多いように感じます。
差分ツールが出した差分行数から単体テストの実施数が決められていて、その単体テストというのがデバッガで一行一行確認して変数の中の値をエクセルに貼り付けていくという苦行を強いられていた頃はよく歪な条件分岐を使っていたなー(遠い目)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
職業プログラマじゃないけど、「悪いコード」を想像してみました。 (スコア:0)
・移植性が低いか、ほとんどない。
・再利用できない関数が大量にある。
・switch文の中に5case以上書かれている。
・プログラムがどう動いているかを説明できるのが書いた当人だけ。
納期で叩かれたら、どんな名プログラマでもクソコードを吐くだろうと思っています。
Re:職業プログラマじゃないけど、「悪いコード」を想像してみました。 (スコア:0)
いや、必要であればむしろswitch文で書いてくれないと困りますが。(全部if~elseとか)
酷く見えるのは処理の分割(後述)がされていないからでしょう。
switch文の使い方でなんとかしたいのは
この辺でしょうか。
一般的には多重ネストや分岐後の処理がどうしても長くなるなら、関数に分けるなどすべきです。
# 関数呼び出しのオーバヘッドとかを気にしないといけないような場合は除く。
分岐後の処理がやたらと長い場合、処理の分割がまともに出来ていない(していない)ことが多いですね。
分岐の条件が考えられていないパターン
switch (hoge)
{
case 1:
if (foo > bar)
{
<処理>
}
break ;
case 2:
if (bar == baz)
{
<処理>
}
break ;
}
コードの例としてはいい加減ですので、感覚だけ掴んで貰えれば……。
switchで分岐した後にさらに条件分岐している場合、
条件比較の順序から見直しを行うと簡潔になることが多いですね。
# 上記例の場合、foo,bar,bazの比較をswitch文の前に持っきて、その結果を格納して使うなど
あとコピペを多用する人によく見られるのが以下の形。
switch (hoge)
{
case: 1
a = aa ;
<変数aを使った処理10> ― (1)
break ;
case: 2
a = ab ;
< (1)とほぼ、あるいは全く同じ>
break ;
...
case: 26
a = az ;
< (1)とほぼ、あるいは全く同じ>
break ;
}
あと、こんなのもみたことが。
switch (hoge)
{
case: 1
<処理> ― (1)
break ;
case: 2
< (1)と全く同じ>
break ;
...
case: 26
<処理> ― (2)
break ;
}
既存のコードに手を入れることが必要以上に禁止されている現場で、
歪な条件分岐を見る機会が多いように感じます。
Re: (スコア:0)
差分ツールが出した差分行数から単体テストの実施数が決められていて、
その単体テストというのがデバッガで一行一行確認して変数の中の値をエクセルに貼り付けていくという苦行を強いられていた頃は
よく歪な条件分岐を使っていたなー(遠い目)