💎
Ruby 編程語言中文教學網站 | 香港編程學院

Ruby編程語言中文教學網站

本教學網站包含 Ruby 基本語法、條件判斷、迴圈、方法、陣列、雜湊、物件導向、實務範例與互動小測驗。 適合第一次接觸 Ruby 的初學者,也適合作為快速複習用的單頁筆記。

Hello World 變數與資料型別 Array / Hash if / case / while 方法與區塊 類別與物件
irb(main):001:0> puts "Hello, Ruby!"
Hello, Ruby!
=> nil

irb(main):002:0> name = "Matz"
=> "Matz"

irb(main):003:0> puts "Ruby 的創始人是 #{name}"
Ruby 的創始人是 Matz
=> nil

irb(main):004:0> [1, 2, 3].map { |n| n * 2 }
=> [2, 4, 6]

建議初學者先從 IRB(Interactive Ruby)互動環境開始,因為可以立即看到每行程式的執行結果。

課程總覽

Ruby 是一門重視可讀性與開發體驗的語言,核心內容分為 literals、assignment、control expressions、methods、calling methods、modules and classes、exceptions、operators 等主題。

01 入門觀念

先理解 Ruby 的思考方式

  • 所有東西幾乎都能當成物件來操作
  • 程式碼追求「讀起來像自然語言」
  • IRB 很適合邊試邊學
  • 最後一個運算結果常常就是回傳值
02 核心語法

從基礎到實作

  • 字串、數字、布林值、nil
  • 變數、陣列、雜湊
  • if / unless / case
  • while / until / each / for
03 進階應用

寫出更像 Ruby 的程式

  • 方法、預設參數、關鍵字參數
  • 區塊 block 與迭代
  • 類別 class 與初始化 initialize
  • 小專案與練習題

開始學習前:環境與第一支程式

Quickstart: 若已安裝 Ruby,可先開啟 IRB 練習字串輸出、基本運算與變數指定,這是最直覺的入門方式。

步驟 1:確認 Ruby 是否已安裝

ruby -v
irb
如果你能看到 Ruby 版本,代表環境已經可用。接著輸入 irb 進入互動模式。

步驟 2:你的第一支 Ruby 程式

puts "Hello, Ruby!"

puts 會把內容印到畫面上。示範了 puts "Hello World" 的寫法。

Ruby 語法教學

以下依照初學者最需要的主題整理:資料型別、字串、陣列、雜湊、條件判斷、迴圈、方法與物件導向。

1. 變數與基本資料型別 Numbers / Strings / Boolean / nil

Ruby 常見的基本資料包含數字、字串、布林值與 nil。在 Ruby 的條件判斷裡,只有 nilfalse 會被視為假,其餘物件都是真值。這是 Ruby 非常重要的觀念。

name = "Ruby"
age = 30
is_fun = true
nothing = nil

puts name
puts age
puts is_fun
puts nothing.inspect
重點:0、空字串 ""、空陣列 [] 在 Ruby 裡都算真值,不是 false。
2. 字串與字串插值 String Interpolation

Ruby 很常使用雙引號字串搭配 #{變數} 進行字串插值,讓輸出更自然、可讀性更高。

name = "小明"
score = 95

puts "學生姓名:#{name}"
puts "考試成績:#{score} 分"

小技巧:雙引號會處理字串插值,單引號通常不會。

3. 陣列 Array 索引 / 切片 / 迭代

根據 Ruby 核心文件,Array 可用正索引、負索引、範圍切片或起點加長度的方式存取資料,也能用 mapselecteach 等方法處理集合。

fruits = ["apple", "banana", "cherry"]

puts fruits[0]      # apple
puts fruits[-1]     # cherry
p fruits[0..1]      # ["apple", "banana"]

fruits.each do |fruit|
  puts "我喜歡 #{fruit}"
end
寫法 用途
arr[0] 取得第一個元素
arr[-1] 取得最後一個元素
arr[1, 2] 從索引 1 開始取 2 個元素
arr[0..2] 用範圍切片
4. 雜湊 Hash key-value 資料結構

Hash 是 Ruby 中用來儲存鍵值對的資料結構。Hash 的 key 必須唯一,而且 Hash 會保留項目建立時的順序。

person = {
  name: "Matz",
  language: "Ruby",
  age: 59
}

puts person[:name]
puts person[:language]
puts person[:age]
Ruby 常見寫法是 name: "值",這其實是 symbol key 的簡潔語法。
5. 條件判斷:if / unless / case Control Expressions

Ruby 控制流程包含多種控制表達式,包含 ifunlesscasewhileuntilforbreaknextredo 等。

score = 82

if score >= 90
  puts "優秀"
elsif score >= 60
  puts "及格"
else
  puts "不及格"
end

logged_in = false

unless logged_in
  puts "請先登入"
end

grade = "B"

case grade
when "A"
  puts "表現非常好"
when "B"
  puts "表現不錯"
else
  puts "再加油"
end
6. 迴圈與迭代 while / until / each / for

Ruby 有傳統迴圈,也很常使用集合搭配區塊進行迭代。實務上,eachfor 更常見,因為更符合 Ruby 的風格。

i = 1
while i <= 3
  puts "while 次數:#{i}"
  i += 1
end

count = 3
until count == 0
  puts "倒數:#{count}"
  count -= 1
end

[10, 20, 30].each do |num|
  puts num * 2
end
初學者可以先把 while 當成「條件成立就繼續跑」,把 until 當成「條件成立前一直跑」。
7. 方法 method def / 預設值 / 關鍵字參數 / splat / block

Ruby方法定義通常由 def 開始,以 end 結束;方法預設回傳最後一個運算結果。預設參數、關鍵字參數、splat 參數與 block 參數等語法。

def greet(name, title = "同學")
  "你好,#{title} #{name}"
end

puts greet("小華")
puts greet("小華", "老師")

def introduce(name:, age:)
  "我是 #{name},今年 #{age} 歲"
end

puts introduce(name: "Ruby", age: 30)

def sum_all(*numbers)
  numbers.sum
end

puts sum_all(1, 2, 3, 4)
語法 說明
def hello ... end 基本方法定義
a = 1 預設參數
name: 關鍵字參數
*args 收集多個位置參數
&block 接收區塊參數
8. 區塊 block 與迭代精神 Ruby 風格核心

Ruby 非常常使用區塊。你可以把區塊想成「一小段傳進方法裡執行的程式」。這種寫法在陣列處理、檔案讀寫與 DSL 設計中特別常見。

numbers = [1, 2, 3, 4, 5]

squares = numbers.map { |n| n ** 2 }
evens   = numbers.select { |n| n.even? }

p squares
p evens

map 是轉換資料,select 是篩選資料。這兩個方法非常值得熟悉。

9. 類別與物件導向 class / initialize / attr_accessor

Ruby 很適合用簡潔的語法建立物件、封裝資料與行為。

class Dog
  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def bark
    "#{@name}:汪!"
  end
end

dog = Dog.new("小白")
puts dog.bark
@name 是實例變數,initialize 是建立物件時自動執行的初始化方法。

範例應用例子

光懂語法還不夠,真正熟悉 Ruby 的關鍵是把語法拿去組成小功能。下面提供三個很適合初學者練習的例子。

範例 1

成績等第判斷器

結合輸入、條件判斷與字串插值。

print "請輸入分數:"
score = gets.to_i

result =
  if score >= 90
    "A"
  elsif score >= 80
    "B"
  elsif score >= 70
    "C"
  elsif score >= 60
    "D"
  else
    "F"
  end

puts "你的等第是:#{result}"
  • 學會 gets.to_i 讀取數字
  • 理解 if / elsif / else
  • 觀察 if 也能回傳值
範例 2

待辦事項 Todo List

使用 Array 儲存多筆資料,再用 each_with_index 顯示清單。

todos = []

loop do
  puts "\n1. 新增待辦"
  puts "2. 查看清單"
  puts "3. 離開"
  print "請選擇:"
  choice = gets.to_i

  case choice
  when 1
    print "輸入待辦內容:"
    item = gets.chomp
    todos << item
    puts "已新增:#{item}"
  when 2
    puts "\n=== 待辦清單 ==="
    todos.each_with_index do |todo, index|
      puts "#{index + 1}. #{todo}"
    end
  when 3
    puts "再見!"
    break
  else
    puts "請輸入有效選項"
  end
end
  • 學會 loop dobreak
  • 練習 Array 新增元素 <<
  • 活用 case 分支
範例 3

銀行帳戶物件

使用 class 管理資料與功能,是很典型的 Ruby 物件導向入門案例。

class BankAccount
  attr_reader :owner, :balance

  def initialize(owner, balance = 0)
    @owner = owner
    @balance = balance
  end

  def deposit(amount)
    @balance += amount
    "#{owner} 存入 #{amount} 元,目前餘額 #{@balance} 元"
  end

  def withdraw(amount)
    if amount > @balance
      "餘額不足"
    else
      @balance -= amount
      "#{owner} 提領 #{amount} 元,目前餘額 #{@balance} 元"
    end
  end
end

account = BankAccount.new("小林", 1000)
puts account.deposit(500)
puts account.withdraw(300)
puts account.withdraw(5000)
  • 建立類別與物件
  • 使用 attr_reader 提供唯讀屬性
  • 把資料與行為封裝在同一個類別內

Ruby 小測驗

做完下面 6 題,快速檢查你對 Ruby 核心語法的理解。

1. 在 Ruby 的條件判斷中,哪兩個值會被視為假值?

2. 哪個語法可以定義 Ruby 方法?

3. 若 arr = ["a", "b", "c"],那麼 arr[-1] 會得到什麼?

4. 哪一個最適合表示鍵值對資料?

5. 下列哪個方法最常用來逐一走訪陣列元素?

6. person = { name: "Ruby" } 中,:name 是什麼?