ルール
チェック 除数 前に 除算 演算。
除算 による ゼロ は ランタイム クラッシュ および
必ず 防止 防止 明確に 明示的な チェックによって
サポート言語: 45+はじめに
ほとんどの言語において、ゼロ除算は即座にランタイムエラーを引き起こし、グレースフルデグラデーションなしにアプリケーションをクラッシュさせます。ユーザー入力、計算値、またはデータベースの結果はすべて、予期せずゼロ除数を生成する可能性があります。単一の未チェックの除算操作が、エッジケースデータによってエラーがトリガーされた際に、本番サービスを停止させる可能性があります。
なぜ重要なのか
システムの安定性: Java、C、Pythonなどの言語では、ゼロ除算はアプリケーションを即座にクラッシュさせる可能性があります。本番環境では、これはリクエストの喪失、トランザクションの中断、およびサービス利用不可を意味します。JavaScriptではゼロ除算が返しますが、 インフィニティ または NaN、これらの値は計算を通じて伝播し、誤った結果を引き起こします。
データ整合性: バッチ処理やデータパイプライン中に除算エラーが発生すると、クラッシュする前に部分的な結果が書き込まれることがあります。これによりデータは不整合な状態になり、手動での復旧が必要となり、完全なデータに依存するダウンストリームシステムを破損させる可能性があります。
アタックサーフェス:攻撃者は、意図的にゼロ除算を引き起こす入力を作成し、サービスをクラッシュさせる可能性があります。除数を検証せずに計算を実行するAPIエンドポイントは、サービス拒否攻撃のベクトルとなります。たった1つの悪意のあるリクエストで、サービス全体が停止する可能性があります。
コード例
❌ 非準拠:
function calculateAverageOrderValue(totalRevenue, orderCount) {
return totalRevenue / orderCount;
}
function calculateConversionRate(conversions, visitors) {
return (conversions / visitors) * 100;
}
誤っている理由: 除数がゼロの場合、両方の関数がクラッシュします。 calculateAverageOrderValue() ~の場合に失敗します orderCount は0であり、 calculateConversionRate() ~の場合に失敗します 訪問者 は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;
}これが重要な理由:明示的なチェックにより、ゼロ除算によるクラッシュを防ぎます。関数は、除算が不可能な場合に適切なデフォルト値(ゼロ)を返します。アプリケーションは、エッジケースの入力があっても実行を継続し、安定性と可用性を維持します。
まとめ
除算操作の前に常に除数を検証してください。適切なデフォルト値を返すか、詳細なエラーをスローするか、ビジネスロジックに基づいてゼロケースを処理してください。特にユーザー入力や外部データの場合、除数がゼロ以外であると決して仮定しないでください。

