Nim 語言程式教學:控制結構

在預設情形下,程式執行順序是由上而下依序執行;透過控制結構 (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