Perl 6 程式設計教學:控制結構 (Control Structures)

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