ガード節によるネスト防止
ステートメントをネストし過ぎると可読性が著しく低下します。逆に言えばネストが少なければ見やすくなるのです。
課題
以下のような数値をチェックするような関数を考えます。
private int test1(int x, int y, int z) { int res = 0; if (x < 0) { res = 1; } else { if (y < 0) { res = 2; } else { if (z < 0) { res = 3; } } } return res; }
Private Function test1(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer Dim res As Integer = 0 If x < 0 Then res = 1 Else If y < 0 Then res = 2 Else If z < 0 Then res = 3 End If End If End If Return res End Function
リファクタリング
この場合はガード節を利用したリファクタリングが効果的です。ガード節とは、レアケースと通常ケースを切り分け、早めにreturnなどで抜けてしまう手法をいいます。ガード節を利用するとステートメントのネストを減らすことができ、また異常系と正常系の切り分けが認識しやすくなるメリットがあります。
private int test2(int x,int y,int z) { if (x < 0) return 1; if (y < 0) return 2; if (z < 0) return 3; return 0; }
Private Function test2(ByVal x As Integer, ByVal y As Integer, ByVal z As Integer) As Integer If (x < 0) Then Return 1 If (y < 0) Then Return 2 If (z < 0) Then Return 3 Return 0 End Function
このようにガード節を用いると、「条件に全く一致しない場合は、初期値を返す(何もしない)」を明確に提供することが出来ます。