What's the difference between GoTo, using a Select, and using separate function?

594 views Asked by At

To start off, I know that using Goto is never a good idea. But I'm having a hard time seeing the difference between the following structures...All of them process conditions sequentially, stop processing when they find a true value, then return control to a specified location in the code (the next line, as that's where this particular 'GoTo' target is). What is the difference between:

Ifs with GoTo:

If ConditionA then 'This is designed to skip the evaluation of condition B if condition A is met.
    Do something
    Goto Resume
End If
If ConditionB then
    Do something
    Goto Resume
End If
Resume:

Select Case:

Select ConditionIsTrue 'This will also skip the evaluation of B if A is true.
    Case A
        Do something
    Case B
        Do something
End select

Separate sub:

EvaluateConditions(condition)

Sub EvaluateConditions(condition)
    If A then
        DoSomething
        Exit Sub
    End If
    If B then
        DoSomething
        Exit Sub
     End If
End Sub
1

There are 1 answers

0
coder231 On BEST ANSWER

In general,

  1. 'goto' transfers the control of execution to the label that you are assigning. The control never comes back to where you use 'goto'. As the program flow is altered altogether, it is not advisable to use 'goto'. It becomes hard to debug.

  2. When you write a subroutine and call it from other part of your code, the control is transferred back to the called part of your code once the execution of subroutine is complete. Hence, unlike goto, the program flow will not be affected and is always advisable to use subroutines instead of goto.

  3. In case of select statement, it is not much different from multiple 'if-else' statements. Instead of having too many 'if-else' you can use 'select' to have a more cleaner code.

Being specific to what you have asked, all three does the same and there is no difference as such. What you choose depends on your requirement, number of conditions, re-usability of the piece of code and future enhancements.

If you have a very few conditions ( 2 or 3) and if you are sure that the piece of code doesn't require future enhancements, it is 'ok' to use goto.(still not a great choice)

If the piece of code should be reusable or even otherwise, using subroutine is the best choice. In fact, even if you have a very few conditions, it is better to use 'select' statement within the subroutine so that your code looks clean and is easy to add further conditions in future.