(ネストされたコードではなく)ガードを使用するもう1つの大きな理由があります。別のプログラマーが関数にコードを追加した場合、それらはより安全な環境で動作します。
考えてみましょう:
void MyFunc(object obj)
{
if (obj != null)
{
obj.DoSomething();
}
}
対:
void MyFunc(object obj)
{
if (obj == null)
return;
obj.DoSomething();
}
ここで、別のプログラマーが次の行を追加するとします。obj.DoSomethingElse();
void MyFunc(object obj)
{
if (obj != null)
{
obj.DoSomething();
}
obj.DoSomethingElse();
}
void MyFunc(object obj)
{
if (obj == null)
return;
obj.DoSomething();
obj.DoSomethingElse();
}
明らかにこれは単純なケースですが、プログラマーは最初の(ネストされたコード)インスタンスのプログラムにクラッシュを追加しました。2番目の例(ガード付きの早期終了)では、ガードを通過すると、コードはnull参照の意図しない使用から安全になります。
確かに、優れたプログラマーはこのような間違いを犯しません(多くの場合)。しかし、予防は治療よりも優れています。この潜在的なエラーの原因を完全に排除する方法でコードを記述できます。ネスティングは複雑さを増すため、ベストプラクティスでは、ネスティングを減らすためにコードをリファクタリングすることをお勧めします。