ルール
チェック 除数 前に 除算 演算。
除算 による ゼロ は ランタイム クラッシュ および
必ず 防止 防止 明確に 明示的な チェックによって
サポート言語: 45+はじめに
ゼロ除算はほとんどの言語で即時的な実行時エラーを引き起こし、アプリケーションを段階的な機能低下なしにクラッシュさせます。ユーザー入力、計算値、データベース結果のいずれからも予期せず除数ゼロが生成される可能性があります。エッジケースデータがエラーを誘発した場合、単一の未チェック除算操作が本番サービスを停止させる可能性があります。
なぜそれが重要なのか
システムの安定性: Java、C、Pythonなどの言語では、ゼロ除算によりアプリケーションが即座にクラッシュする可能性があります。本番環境では、これはリクエストの消失、トランザクションの中断、サービスの利用不能を意味します。JavaScriptでさえ、ゼロ除算が 無限 または NaNこれらの値は計算を通じて伝播し、誤った結果を引き起こします。
データ整合性:バッチ処理やデータパイプライン中に分割エラーが発生すると、クラッシュ前に部分的な結果が書き込まれる可能性があります。これによりデータが不整合な状態となり、手動での復旧が必要となるほか、完全なデータに依存する下流システムが破損する恐れがあります。
攻撃対象領域:攻撃者は意図的に除数を生成する入力を作成し、サービスをクラッシュさせることが可能です。除数を検証せずに計算を実行するAPIエンドポイントは、サービス拒否攻撃の媒介となります。単一の悪意あるリクエストでサービス全体を停止させることが可能です。
コード例
非準拠:
function calculateAverageOrderValue(totalRevenue, orderCount) {
return totalRevenue / orderCount;
}
function calculateConversionRate(conversions, visitors) {
return (conversions / visitors) * 100;
}
なぜそれが間違っているのか: 除数がゼロの場合、両方の関数がクラッシュする。 平均注文金額を計算する() 失敗する 注文数 は 0 であり、 conversionRateを計算する() 失敗する 訪問者 は0である。これらのシナリオは現実的である:新規事業には注文がゼロの場合があり、キャンペーンには訪問者がゼロの場合がある。
✅ 準拠:
function calculateAverageOrderValue(totalRevenue, orderCount) {
if (orderCount === 0) {
return 0;
}
return totalRevenue / orderCount;
}
function calculateConversionRate(conversions, visitors) {
if (visitors === 0) {
return 0;
}
return (conversions / visitors) * 100;
}これが重要な理由:明示的なチェックにより、ゼロ除算によるクラッシュを防止します。除算が不可能な場合、関数は適切なデフォルト値(ゼロ)を返します。エッジケースの入力があってもアプリケーションは動作を継続し、安定性と可用性を維持します。
結論
除算操作の前に必ず除数を検証してください。適切なデフォルト値を返す、説明的なエラーをスローする、またはビジネスロジックに基づいてゼロの場合を処理してください。特にユーザー入力や外部データの場合、除数がゼロでないことを決して仮定しないでください。
.avif)
