私は素晴らしい本を読んでいるところですクリーンコード
1 つの議論は、メソッドに null を渡すことについてです。
public class MetricsCalculator {
public double xProjection(Point p1, Point p2) {
return (p2.x - p1.x) * 1.5;
}
}
...
calculator.xProjection(null, new Point(12,13));
これは、これを処理するためのさまざまな方法を表しています。
public double xProjection(Point p1, Point p2) {
if (p1 == null || p2 == null) {
throw new IllegalArgumentException("Invalid argument for xProjection");
}
return (p2.x - p1.x) * 1.5;
}
public double xProjection(Point p1, Point p2) {
assert p1 != null : "p1 should not be null";
assert p2 != null : "p2 should not be null";
return (p2.x - p1.x) * 1.5;
}
私は主張アプローチですが、アサーションがデフォルトでオフになっている点が気に入りません。
最後にこの本はこう述べています。
ほとんどのプログラミング言語では、呼び出し元によって誤って渡された null を処理する適切な方法はありません。このような状況であるため、デフォルトで null を渡すことを禁止するのが合理的なアプローチです。
この制限をどのように強制するかについては、あまり詳しく述べられていませんね?
どちらか一方に強い意見をお持ちの方はいらっしゃいますか。
ベストアンサー1
一般的なルールは、メソッドがnull
引数を期待していない場合は、システム.ArgumentNullException適切にスローすると、Exception
リソースの破損やその他の問題から保護されるだけでなく、コードのユーザーに対するガイドとして機能し、コードのデバッグに費やす時間を節約できます。
こちらの記事もご覧ください防御プログラミング