Case Statements

Nim also supports case statements, which are like switches in other languages. There are several things to note here:

case "charlie":
  of "alfa":
    echo "A"
  of "bravo":
    echo "B"
  of "charlie":
    echo "C"
  else:
    echo "Unrecognized letter"

case 'h':
  of 'a', 'e', 'i', 'o', 'u':
    echo "Vowel"
  of '\127'..'\255':
    echo "Unknown"
  else:
    echo "Consonant"

proc positiveOrNegative(num: int): string =
  result = case num:
    of low(int).. -1:
      "negative"
    of 0:
      "zero"
    of 1..high(int):
      "positive"
    else:
      "impossible"

echo positiveOrNegative(-1)
$ nim c -r ./case_stmts.nim
C
Consonant
negative

Another feature of case statements is that the possible values are narrowed, meaning that no else statement is necessary in many cases:

let x = 2
case (x and 0b11) + 7:
  of 7: echo "A"
  of 8: echo "B"
  of 9: echo "C"
  of 10: echo "D"
$ nim c -r ./case_stmts_1.nim
C