Perl 6 程式設計教學:控制結構

PUBLISHED ON OCT 6, 2017 — PROGRAMMING

控制結構分為兩大類:

  • 選擇 (selection)
  • 迭代 (iteration)

本文會介紹 Perl 6 中常見的控制結構。

選擇相關的控制結構

if .. elsif .. else

if 是最常見的選擇控制結構。實例如下:

if 也可以用於修飾敘述,如下例:

unless

unlessif 語義相反,條件不符合時才會執行程式碼,因此較少使用。

unless 沒有相對應的 elsifelse 區塊。如果覺得 unless 不好用,將條件寫成同義的 if 即可。

with .. orwith .. else

with 可檢查條件是否有定義,算是一種 if 的語法糖。實例如下:

without

without 是反向的 with,有點像 unless 對於 if 的關係。實例如下:

同樣地,without 沒有 orwithelse 區塊。

given .. when .. default

given 算是另一種簡化 if 的語法,類似 C 語言的 switch。實例如下:

proceed 和 succeed

proceedsucceed 可以改變 given 區塊的流程。proceed 會繼續前進到下一個 when 區塊,而 succeed 則會跳出整個 given 區塊。以下是實例:

迭代相關的控制結構

一般的程式設計中,將這類控制結構稱為迴圈 (loop)。

while

while 在符合條件的情形下,會無限次執行特定程式,如以下實例:

until

until 是反向的 while,會無限次執行特定程式,直到符合某條件才停止,如以下實例:

如果覺得 until 寫起來不直覺,改成相對應的 while 即可。

repeat .. while 或 repeat .. until

加上 repeat 敘述後,即使條件不合,該區塊至少會執行一次。其他用法則和 whileuntil 相同。

loop

loop 相當於傳統的 C 風格迴圈。實例如下:

loop 不加上任何計數器,會變無窮迴圈 (infinite loop),如下例:

for

for 搭配迭代器 (iterator) 使用。透過迭代器,不需了解容器內部實作,而可以直接走訪該容器。使用 ... 生成一個 Range 物件,可作為迭代器。如以下實例:

在後續的文章中,我們會將 for 搭配陣列 (array) 或雜湊 (hash) 使用。

改變迴圈行進

next

next 可以跳過目前的迴圈,進入下一次迭代。見以下實例:

last

last 會直接離開目前的迴圈。見以下實例:

redo

redo 會重新開始同一次迭代。見以下實例:

標籤

nextlastredo 都可以搭配標籤 (labels),可以跳離多層迴圈。

實例:終極密碼

這裡用終極密碼這個經典的題目來展示如何使用控制結構。我們先在 1 至 100 間隨機挑出一個數字,再讓玩家猜這個數字。範例如下:

comments powered by Disqus