Forum Discussion

morris's avatar
morris
Icon for Nimbostratus rankNimbostratus
Oct 06, 2020

iRules command: Switch vs If

I saw the article in https://devcentral.f5.com/s/articles/irules-101-04-switch saying Switch is a higher performing command and run faster than If command.

Why is that so?

  • Yes Morris. That's right.

    If-statement with 3 conditions (and default).

    if { $bla eq "one" } {
       # do something
    } elseif { $bla eq "two" } {
       # do something
    } elseif { $bla eq "three" } {
       # do something
    } else {
       # do something
    }

    Switch-statement with 3 conditions (and default).

    switch $bla {
      "one" {
        # do something
      }
      "two" {
        # do something
      }
      "three" {
        # do something
      }
      default {
        # do something
      }
    }

    Don't forget to mark my answer as the best the help me for the contribution.

    Regards,

    Dario.

  • Hello Morris.

     

    The same article states this:

    "Generally, switch commands are faster than if statements due to additional expression evaluations that need to occur with if commands. Since the switch statements only works on a single comparison value, internal optimizations are able to be made in the evaluation process. This likely isn't going to be a big difference for one or two comparisons, but it is measurable when more are made."

     

    It's because how the if statement is implemented at machine level.

     

    Some reference:

    http://www.blackwasp.co.uk/speedtestifelseswitch.aspx

     

    Regards,

    Dario.

  • morris's avatar
    morris
    Icon for Nimbostratus rankNimbostratus

    hmm, quite interesting article.

    So, basically a switch statement with 1 or 2 conditions won't make much difference than if-else statement but more than 5 "switch statement" would be a better choice. Am I understand correctly?

     

    Any example code for a switch statement with 5 conditions?

    • Yes Morris. That's right.

      If-statement with 3 conditions (and default).

      if { $bla eq "one" } {
         # do something
      } elseif { $bla eq "two" } {
         # do something
      } elseif { $bla eq "three" } {
         # do something
      } else {
         # do something
      }

      Switch-statement with 3 conditions (and default).

      switch $bla {
        "one" {
          # do something
        }
        "two" {
          # do something
        }
        "three" {
          # do something
        }
        default {
          # do something
        }
      }

      Don't forget to mark my answer as the best the help me for the contribution.

      Regards,

      Dario.