[解決済み】MongoDB Javaドライバが条件付きで乱数ジェネレータを使用するのはなぜですか?
質問
で以下のようなコードを見かけました。 このコミット に対して MongoDBのJava接続ドライバ と、一見すると何かの冗談のように見えます。次のコードは何をするものなのでしょうか?
if (!((_ok) ? true : (Math.random() > 0.1))) {
return res;
}
(編集: コード が更新されたので この質問を投稿する)
解決方法を教えてください。
その行の履歴を調べた結果、私の主な結論は、無能なプログラミングが行われていたことです。
-
その行は、ありがた迷惑なほど複雑です。一般的な形式は
a? true : b
について
boolean a, b
は、単純なa || b
-
周囲の否定と過剰な括弧が、さらに事態を複雑にしている。念頭に置くのは ド・モルガンの法則 このコード片が次のようになることは些細な観察である。
if (!_ok && Math.random() <= 0.1) return res;
-
というコミット は、もともとこのロジックを導入していました。 がありました。
if (_ok == true) { _logger.log( Level.WARNING , "Server seen down: " + _addr, e ); } else if (Math.random() < 0.1) { _logger.log( Level.WARNING , "Server seen down: " + _addr ); }
-も無能なコーディングの一例ですが、このように 逆ロジック : ここでは、イベントがログに記録されるのは
_ok
のコードでは、10%のケースで、またはそれ以外のケースで使用されます。 リターン 10%の確率で、90%の確率でログを記録します。つまり、後のコミットはわかりやすさだけでなく、正しさそのものを台無しにしてしまったのです。投稿されたコードを見ると、作者がどのようにオリジナルの
if-then
で必要な否定に文字どおり変換します。return
という条件です。しかしその後、彼は失敗し、不等号を逆にすることで効果的な「二重否定」を挿入してしまった。 -
コーディングスタイルの問題はさておき、ストキャスティック・ロギングというのは、それ自体かなり怪しい行為です。特に、ログ・エントリがそれ自身の特異な動作を記録していないのですから。その意図は、明らかに、サーバーが現在ダウンしているという同じ事実の再記述を減らすことです。適切な解決策は 変更 サーバーの状態を観察し、その観察結果ごとに、あるいはそのような観察結果の10%からランダムに選択するのではありません。そう、これはほんの少し手間がかかるので、少し見てみましょう。
を検査して蓄積された無能の証拠が、このような形で現れることを願うばかりです。 たった3行のコード そして、この作品は早急にクリーンアップされることでしょう。
関連
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] タイプの安全性。アンチェック・キャスト
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] Java の assert キーワードは何をするのか、そしていつ使うべきなのか?
-
[解決済み] なぜJavaのmainメソッドは静的なのですか?
-
[解決済み] なぜfinalize()を実装する必要があるのでしょうか?
-
[解決済み】array[idx++]+="a "は、Java 8ではidxを1回増やすが、Java 9と10では2回増やすのはなぜか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] javascriptでExpression言語を使うには?
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] クエスチョンマーク"? "とコロン": "演算子は何に使うのですか?重複