アカウント名:
パスワード:
リアルタイム信号処理のプログラム書きますが、立ち上がってすぐは入力データが用意されていないでクリアしたバッファの初期値で演算(たとえばパイプラインADCとか使っていて入力に遅延がある)なんてことは普通にあり得るので、アルゴリズム中に割り算があるとき(正規化とかAGCとか)では 0割が発生しないように 除数がゼロかどうかあらかじめチェックします。そして、結果を後段アルゴリズムの制約上問題ない値とします。例外なんて起こさない方がいいし、誰か書いていましたがそんな機構は無い場合もあるしで予測される例外は基本的に排除(生起しないように手を打つ)すべきです。データが用意されるまで待てばいいんだけどね。演算側の水際でも処置しておかないと安心できないつーか、後段の用途によって0割の結果値を吟味するのって普通だと思いますが(0で駄目なら非0の微小値とかそもそものアルゴリズムをスキップするとか)そういうこと考えないでプログラム書いてるんですかね。
>チェックに疲れ果てたベテランプログラマー本来やりたいことからすれば、余計な処理と言えるわけで。。必要なのは分かってるが、堅牢にしようとすればチェック処理の方が多くなるのはもやっとしません?
それは仕方がありません。
交通にしても料理にしても工場にしても建設現場にしても、安全を確保した上で仕事をしているわけで。もし安全のためのチェック処理のほうが多くなっても、それが必要なものであれば省略してはいけません。それが自分自身のためでもありますし、客のためでもありますし、職業倫理でもあります。法律の縛りがあるかないか、という差はありますが。
「それが必要なものであれば」の判断が難しいのだと思うよ。
判断が難しいので、安全に倒して冗長だろうがなんだろうが全てチェックし始めて、privateメソッドの引数や戻り値も疑ってチェックコードだらけになり、使用しているライブラリの結果も疑い、最終的にチェックコードを書くのを面倒になった結果、メソッド分割もせず、外部ライブラリどころか標準ライブラリすらほとんど使用しなくなり、スパゲッティ大盛りな超巨大メソッドになったものを、なんとかしてくれと依頼されるわけです。
# そこまでしてチェックコードを書くのに、ユニットテストはやらない不思議
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell
割り算させない (スコア:5, 参考になる)
リアルタイム信号処理のプログラム書きますが、
立ち上がってすぐは入力データが用意されていないでクリアしたバッファの初期値で演算
(たとえばパイプラインADCとか使っていて入力に遅延がある)
なんてことは普通にあり得るので、アルゴリズム中に割り算があるとき
(正規化とかAGCとか)では 0割が発生しないように 除数がゼロかどうか
あらかじめチェックします。そして、結果を後段アルゴリズムの制約上問題ない値とします。
例外なんて起こさない方がいいし、誰か書いていましたがそんな機構は無い場合もあるしで
予測される例外は基本的に排除(生起しないように手を打つ)すべきです。
データが用意されるまで待てばいいんだけどね。
演算側の水際でも処置しておかないと安心できない
つーか、後段の用途によって0割の結果値を吟味するのって普通だと思いますが
(0で駄目なら非0の微小値とかそもそものアルゴリズムをスキップするとか)
そういうこと考えないでプログラム書いてるんですかね。
Re: (スコア:0)
>チェックに疲れ果てたベテランプログラマー
本来やりたいことからすれば、余計な処理と言えるわけで。。
必要なのは分かってるが、堅牢にしようとすればチェック処理の方が多くなるのはもやっとしません?
Re: (スコア:0)
それは仕方がありません。
交通にしても料理にしても工場にしても建設現場にしても、安全を確保した上で仕事をしているわけで。
もし安全のためのチェック処理のほうが多くなっても、それが必要なものであれば省略してはいけません。
それが自分自身のためでもありますし、客のためでもありますし、職業倫理でもあります。
法律の縛りがあるかないか、という差はありますが。
Re:割り算させない (スコア:0)
「それが必要なものであれば」の判断が難しいのだと思うよ。
判断が難しいので、安全に倒して冗長だろうがなんだろうが全てチェックし始めて、
privateメソッドの引数や戻り値も疑ってチェックコードだらけになり、
使用しているライブラリの結果も疑い、最終的にチェックコードを書くのを面倒になった結果、
メソッド分割もせず、外部ライブラリどころか標準ライブラリすらほとんど使用しなくなり、
スパゲッティ大盛りな超巨大メソッドになったものを、なんとかしてくれと依頼されるわけです。
# そこまでしてチェックコードを書くのに、ユニットテストはやらない不思議