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

【分享本文】
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

    前言

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

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

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

    if

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

    if 寫成虛擬碼如下:

    if cond:
      stat
    

    在這段虛擬碼中,只有 cond 的條件為真,才會執行 stat 的程式碼。

    我們可以額外加一段 else 區塊,這時候 if 敘述會成為二元敘述:

    if cond:
      stat_a
    else:
      stat_b
    

    在這段虛擬碼中,當 cond 為真時,執行 stat_a;反之,執行 stat_b

    我們還可以加上一至多個 elif 區塊,這時候 if 敘述會成為多元敘述:

    if cond_a:
      stat_a
    elif cond_b:
      stat_b
    else:
      stat_c
    

    我們用上述概念寫一個短例如下:

    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"

    由於 n0,會執行 else 區塊內的程式碼。

    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"

    基本上,case 敘述都可以改寫成等義的 if 敘述,只是程式碼會變長。讀者可以自行練習看看。

    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

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email
    【追蹤新文章】
    Facebook Twitter Plurk