= The `switch-case` Construct = ''Part of'' SwitchCaseCategory == Overview == The switch-case construct can be a good way to replace a complicated series of if/else if/else if/else. == How is `switch-case` useful? == Let's say you write a program that has a menu with a bunch of mutually exclusive options. {{{ +---------+------+-------+------+ | File | Edit | Tools | Help | +---------+------+-------+------+ | New | | Open | | Save | | Print | |---------+ | Exit | +---------+ }}} This is just the kind of situation that lead to the creation of the switch-case construct: only one of these options can be clicked at any given time. You can't click "Open" and "Exit" at the same time. So let's just go down the list. Maybe "New" was clicked, so run subroutine `NewWasClicked()`. If "Open" was clicked, then run subroutine `OpenWasClicked()`. And so on down list. If "Exit" was clicked then just `PostQuitMessage(0)`. Finally the `default case` is there so that you can catch whatever might fall through the cracks. == Don't fall through (unless you want to) == D follows in the C/C++ tradition of "falling through" from the matched case to the cases below if there isn't a `break` statement. So unless you actually want all the code for the lower cases executed when the upper case is found, don't forget to include those `break`s. == Example in the D Programming Language == {{{ #!d int main() { int i; switch(i) { case 0: printf("i is zero"); break; /* Without each "break", the flow will fall-through. */ case 1: printf("i is one"); break; case 2: printf("i is one"); break; default: printf("i is one"); break; } return 0; } }}} == Equivalent example in QuickBASIC == {{{ Dim i% Select Case i% Case 0: Print "i is zero" Case 1: Print "i is one" Case 2: Print "i is two" Case 3: Print "i is three" Case Else: Print "i is something else" End Select }}} == Output == {{{ i is zero }}} == Automatic Initialization == By the way, did you notice that `i` is never explicitly assigned a value? Since D uses "automatic initialization", the integer `i` is automatically assigned a default value of 0 as it is declared without specifying another value. == Source == || Link || http://jcc_7.tripod.com/d/tutor/switch_case.html || || Author || jcc7 ||