アカウント名:
パスワード:
警告を無視しちゃいかんという教訓を得たと。
こんな感じに、if分を一行にまとめてしまえば、こんな不具合出なかった気がします。
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail;if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;
一行が長くなるのを嫌ったのかな?
一行にまとめるコーディングは嫌いですし、職業プログラマーはあまり使うべきではないとも思っています。なので対処はif分の処理が1行でも必ず括弧で括る事です。
そうですね。どっちにしろ2行以上あれば必ず括弧が必要な訳だし、if文書いたら脊髄反射で{}を書いてしまうくらいでちょうどいいです。
心掛ける以前に、オートインデントのために{}は必須でしょう自分でTabキーを押すなんて面倒臭すぎて死んじゃう
括弧がないくらいでオートインデントできないエディタは使うべきじゃないんじゃないかな
スタイルの問題ではないでしょこれは。こういう重要な箇所くらいテストで100%のカバレッジを確保しろよと。どーでもいいとこに心血注ぐ必要はないけどさ。
gotoとか使うとか{}を書かないとかするなら、全パターン網羅しろって感じではあります。
だよね、カバレッジ取れば実行されないことが一発で分かる。どこまでのテストをしているのか分からないけど、品質管理は相当お粗末なのだろうな。
いいえ、コーディングスタイルとテストの両方が必要です。
テストもコードであるかぎり必ず漏れが発生するよ。常に完璧なテストコードを書けるようならそもそも最初のバグ自体入らん。
この手のミスを防ぐ為にコーディング規約で縛っておくのが良いと思っています。
goto fail;くらいなら1行にした方が1行抹消でif文と処理が両方消せていいんじゃないかな。}{の置き方次第でif文1行抹消で前後がうまく繋がっちゃう可能性もあるし。
四角四面なルールに沿って行動することで、プログラマは脳みそがルーチンワークに最適化されて、脳みそを使わず脊髄で仕事をするようになる。
それが最悪の結果をもたらす。
コーダーがルーチンワークに最適化されずにどうする?勘違いしてないか。
してない。だから駄目ソフトができあがる。
コーダーなんて役割を分業している開発体制に問題がある。
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) { ;} else if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) { ; ;} else if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) { ;} else { ...}これなら、ミスってもバグにはならなかった。
if (!( (err = SSLHashSHA1.update(&hashCtx, &serverRandom)) ||
それ、else ifのところはみんなが「絶対やるな」とドヤ顔で言ってる中括弧のないelse節だって気づいてる?# 文法的に中括弧を強制するならelseifキーワードの導入も事実上必須ってこと。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー
unreachable codeの警告は無視されたのか (スコア:0)
警告を無視しちゃいかんという教訓を得たと。
こんな感じに、if分を一行にまとめてしまえば、こんな不具合出なかった気がします。
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;
一行が長くなるのを嫌ったのかな?
Re:unreachable codeの警告は無視されたのか (スコア:3, すばらしい洞察)
一行にまとめるコーディングは嫌いですし、職業プログラマーはあまり使うべきではないとも思っています。
なので対処はif分の処理が1行でも必ず括弧で括る事です。
Re:unreachable codeの警告は無視されたのか (スコア:1)
そうですね。
どっちにしろ2行以上あれば必ず括弧が必要な訳だし、if文書いたら脊髄反射で{}を書いてしまうくらいでちょうどいいです。
Re: (スコア:0)
心掛ける以前に、オートインデントのために{}は必須でしょう
自分でTabキーを押すなんて面倒臭すぎて死んじゃう
Re: (スコア:0)
括弧がないくらいでオートインデントできないエディタは
使うべきじゃないんじゃないかな
Re:unreachable codeの警告は無視されたのか (スコア:1)
スタイルの問題ではないでしょこれは。
こういう重要な箇所くらいテストで100%のカバレッジを確保しろよと。
どーでもいいとこに心血注ぐ必要はないけどさ。
Re: (スコア:0)
gotoとか使うとか{}を書かないとかするなら、全パターン網羅しろって感じではあります。
Re: (スコア:0)
だよね、カバレッジ取れば実行されないことが一発で分かる。
どこまでのテストをしているのか分からないけど、品質管理は相当お粗末なのだろうな。
Re: (スコア:0)
いいえ、コーディングスタイルとテストの両方が必要です。
Re: (スコア:0)
テストもコードであるかぎり必ず漏れが発生するよ。
常に完璧なテストコードを書けるようならそもそも最初のバグ自体入らん。
Re: (スコア:0)
この手のミスを防ぐ為にコーディング規約で縛っておくのが良いと思っています。
Re: (スコア:0)
goto fail;くらいなら1行にした方が1行抹消でif文と処理が両方消せていいんじゃないかな。
}{の置き方次第でif文1行抹消で前後がうまく繋がっちゃう可能性もあるし。
Re: (スコア:0)
四角四面なルールに沿って行動することで、
プログラマは脳みそがルーチンワークに最適化されて、
脳みそを使わず脊髄で仕事をするようになる。
それが最悪の結果をもたらす。
Re: (スコア:0)
コーダーがルーチンワークに最適化されずにどうする?
勘違いしてないか。
Re: (スコア:0)
してない。
だから駄目ソフトができあがる。
Re: (スコア:0)
コーダーなんて役割を分業している開発体制に問題がある。
地味なコードこそベスト (スコア:0)
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) {
;
} else if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) {
;
;
} else if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) {
;
} else {
...
}
これなら、ミスってもバグにはならなかった。
if (!( (err = SSLHashSHA1.update(&hashCtx, &serverRandom)) ||
Re: (スコア:0)
それ、else ifのところはみんなが「絶対やるな」とドヤ顔で言ってる中括弧のないelse節だって気づいてる?
# 文法的に中括弧を強制するならelseifキーワードの導入も事実上必須ってこと。