Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a difference between nested and non nested else/else ifs?

I have a task at work to rewrite old vb code into c# and i came across this

If (termNumber = TermNumberCode.FallWinter) Then
    Dim first_term As String = " ((Course.dbo.CourseList.[Year])=@TermYear) AND ((Course.dbo.CourseList.TermNumber)=3)  "

    Dim second_term As String = " ((Course.dbo.CourseList.Year)=@TermYear+1) AND ((Course.dbo.CourseList.TermNumber)=1)  "
    query &= "  AND ( ( " & first_term & " ) OR ( " & second_term & " ) )  "

Else
    If (termNumber = TermNumberCode.Summer) Then
        query &= " AND ((Course.dbo.CourseList.[Year])=@TermYear) AND ((Course.dbo.CourseList.TermNumber)=2)  "

    ElseIf (termNumber = TermNumberCode.Fall) Then
        query &= " AND ((Course.dbo.CourseList.[Year])=@TermYear) AND ((Course.dbo.CourseList.TermNumber)=3)  "

    ElseIf (termNumber = TermNumberCode.Winter) Then
        query &= " AND ((Course.dbo.CourseList.[Year])=@TermYear) AND ((Course.dbo.CourseList.TermNumber)=1)  "

    End If
End If 

I was wondering, Is this the same as writing it like this or if there is any special significance or nesting the ifs like that?

If (termNumber = TermNumberCode.FallWinter) Then
    code...

Else if (termNumber = TermNumberCode.Summer)
    code...

Else If (termNumber = TermNumberCode.Fall) 
    code...

Else //(termNumber = TermNumberCode.Winter)
    code...
like image 725
173901 Avatar asked Dec 07 '25 16:12

173901


1 Answers

The form

if #1..    
else
   if #2..
   else if #3..
   else ..
end

is equivalent to

if #1..
else if #2..
else if #3..
else ..

That is, the immediate nesting inside an else does not affect the logic of the nested branches. This can be repeated indefinitely - although the non-nested form is arguably more clear here.

However, in the presented code the else and a final else if is transposed, which won't make a difference if termNumber if constrained to the set checked against. But it is a difference - what if termNumber is TermNumberCode.SpringBreak? - and thus it must be considered separately from the transformation above..

like image 63
user2864740 Avatar answered Dec 09 '25 22:12

user2864740