Nim 語言程式教學:控制結構 (Control Structure)

PUBLISHED ON FEB 21, 2018 — PROGRAMMING

    在預設情形下,程式執行順序是由上而下依序執行;透過控制結構 (control structure),可以改變程式運行的順序,程式好像有自己的判斷力般。控制結構分為兩種:

    • 選擇 (selection):選擇是否執行某個程式碼區塊
    • 迭代 (iteration):重覆執行某個程式嗎區塊

    本文會介紹 Nim 可用的控制結構。

    if

    由於 if 在英文中剛好是「如果」的意思,大部分程式語言都會用 if 做為選擇結構的關鍵字。Nim 語言也是使用 if 做為選擇結構的關鍵字。實例如下:

    const n = 0
    
    if n > 0:
      echo "n is larger than zero"
    elif n < 0:
      echo "n is smaller than zero"
    else:
      echo "n is equal to zero"
    

    case

    case 承襲 C 家族的 switch 結構,算是一種簡化 if 的語法糖。實例如下:

    import times
    
    let week = getLocalTime(getTime()).weekday
    
    case week
    of Weekday.dWed:
      echo "Hump day"
    of Weekday.dFri:
      echo "Thank God It's Friday"
    of Weekday.dSat, Weekday.dSun:
      echo "Weekend"
    else:
      echo "Week"
    

    case 也可用於一段區間 (range),實例如下:

    let score = 88
    
    case score
    of 90..100:
      echo "A"
    of 80..89:
      echo "B"
    of 70..79:
      echo "C"
    of 60..69:
      echo "D"
    else:
      echo "F"
    

    while

    while 是重覆次數未固定的迭代結構,只要符合條件,就會一直迭代下去。實例如下:

    var i = 1
    
    while i <= 10:
      echo i
      i += 1
    

    for

    對於迭代次數固定的程式,使用 for 可以簡化程式碼。實例如下:

    for i in countup(1, 10):
      echo i
    

    也可以使用區間 (range),如下例:

    for i in 1 .. 10:
      echo i
    

    如果計數器 (counter) 每次跳動不為 1,可手動指定參數,如下例:

    for i in countup(1, 10, 2):
      echo i
    

    另外還有使用陣列、序列、其他容器或迭代器 (iterator) 來迭代的 for 結構,將於後文介結。

    break

    break 用於提早離開迭代結構,實例如下:

    var i = 1
    
    while true:
      if i > 5:
        break
    
      echo i
      i += 1
    

    continue

    continue 用於跳過本次迭代結構剩下的程式碼,繼續下一次迭代。實例如下:

    for i in countup(1, 10):
      if i mod 2 != 0:
        continue
    
      echo i
    

    when

    whenif 類似,用於選擇結構,實例如下:

    when system.hostOS == "windows":
      echo "running on Windows!"
    elif system.hostOS == "linux":
      echo "running on Linux!"
    elif system.hostOS == "macosx":
      echo "running on Mac OS X!"
    else:
      echo "unknown operating system"
    

    whenif 最大的不同在於 when 是在編譯期執行,通常用於條件編譯,類似 C 語言巨集的 #ifdef

    comments powered by Disqus