位元詩人 [Raku] 程式設計教學:基本概念

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

本文介紹 Raku 的核心基本概念,為你奠定撰寫 Raku 程式必備的基礎知識。

檔案規範

副檔名

Raku 檔案依據用途使用不同的副檔名:

  • 主程式.raku
  • 模組.rakumod
  • 文件.rakudoc
  • 測試程式.rakutest

💡 歷史背景:由於 Raku 早期被稱為 Perl 6,因此曾沿用 Perl 的副檔名。目前官方已不再建議繼續使用舊版副檔名。

檔案名稱

Raku 對於檔案名稱沒有特殊限制,只要符合作業系統的命名規範即可。

建議命名習慣:

  • 避免在檔名中使用空白字元,以免造成開發或指令執行的困擾。
  • 通常建議使用小寫英文字母並以 -(破折號)分隔單字。

編碼規範

Raku 原始碼預設採用 UTF-8 編碼。這種現代化的設計趨勢也同樣見於 Go (Golang) 或 Rust 等當代程式語言中。

⚠️ 注意事項:雖然 Raku 支援豐富的 Unicode 字元,但部分 UTF-8 特殊字元難以透過鍵盤直接輸入。為了提高程式碼的可讀性與維護性,開發時應盡量避免使用這些不易輸入的特殊字元。

Hello World 入門

撰寫程式腳本 (Script)

請建立一個名為 hello.raku 的文字檔案,並寫入以下程式碼:

say "Hello World";

接著在終端機執行此腳本:

$ raku hello.raku
Hello World

當程式邏輯較長或較複雜時,將其寫成腳本檔案最便於日後重複利用。

從命令列直接執行

如果是非常簡短的程式,你也可以不需要建立檔案,直接在終端機中執行:

$ raku -e 'say "Hello World";'
Hello World

這種單行的程式寫法被稱為 One-liner,在 Unix/Linux 環境中非常常見且實用。

互動式環境 (REPL)

當你執行 raku 指令且不帶任何參數時,將會進入 REPL 互動模式。

💡 什麼是 REPL?
REPL 是 Read-Eval-Print-Loop(讀取-求值-輸出-循環)的縮寫,是一個能夠即時反饋的互動式開發環境。

$ raku
To exit type 'exit' or '^D'
>

在此模式下,你每輸入一行程式碼,就能立刻看到執行結果:

> say "Hello World";
Hello World
>

REPL 模式最大的優勢在於無需建立檔案即可獲得即時反饋。當你想快速測試 Raku 語法或練習新觀念時,這是一個非常理想的工具。

鎖定語言版本

由於 Raku 目前屬於較小眾的語言,幾乎沒有歷史包袱(Legacy code),因此鎖定語言版本通常不是必要的步驟。即便如此,Raku 仍然提供了指定版本的語法:

use v6.d;

你可以在每個 Raku 程式碼的開頭加上這行指令。這樣做可以確保整個專案(Codebase)都嚴格遵循相同的語法特性與標準。

製作 Unix 可執行檔

如果你想將 Raku 腳本直接當成 Unix/Linux 系統中的獨立指令執行,可以透過以下步驟達成:

在 Raku 腳本的第一行加上此路徑宣告:

#!/usr/bin/env raku

在終端機中使用 chmod 指令為腳本(例如名為 myapp 的檔案)加上可執行權限:

$ chmod +x myapp

接著就能像一般指令一樣直接呼叫它:

$ ./myapp

💡 注意事項:當腳本被當作 Unix 執行檔使用時,檔案名稱通常不需要加上副檔名(例如不使用 .raku)。這是 Unix 系統的共通標準與習慣。

排版元素

除了必要的空白外,Raku 並沒有嚴格限制排版樣式。然而,為了提升程式碼的可讀性,良好的排版與縮排仍是開發時的最佳實踐。

註解(Comments)

Raku 提供了三種註解方式:

  • 單行註解:使用 #,其後方的文字皆視為註解,不會被執行。
  • 多行 / 內嵌註解:使用成對的 # 加括號(例如 #`())。可用於單行內嵌或跨越多行。
  • 文件註解(Pod):使用 =begin comment=end comment 包裹大段說明的文字。

表達式(Expressions)與敘述式(Statements)

  • 表達式(Expression):指「會運算並回傳數值」的程式碼片段。例如:
    • 42
    • "Hello"
    • $n + 1
  • 敘述式(Statement):指「會執行某個動作或產生效果」的完整指令。例如:
    • my $n;(宣告變數)
    • $n = 42;(賦值)
    • say "Hello World";(輸出文字)

主流的指令式(Imperative)與物件導向(Object-Oriented)程式語言多以敘述式為主。Raku 延續了 Perl 的設計哲學,雖然整體架構以敘述式為核心,但在許多語法情境中,都能靈活嵌入並運用表達式。

關於作者

位元詩人 (ByteBard) 是資訊領域碩士,喜歡用開源技術來解決各式各樣的問題。這類技術跨平台、重用性高、技術生命長。

除了開源技術以外,位元詩人喜歡日本料理和黑咖啡,會一些日文,有時會自助旅行。