上次提到我們可以把數字、字串存在變數中,然後對變數做一些運算。但是當我們想對一大堆資料做事情時,不就要定義一大堆變數,取一大堆變數名稱?如果我要重複做一件事情,是要把同一段程式碼打很多遍嗎?以下簡介 Ruby 的進階語法概念,這些功能能幫助我們寫出更複雜的程式碼,當然也就能做出更豐富功能的程式。
使用陣列可以把多個資料放在一起,方便對資料們做相同的事情,通常會搭配迴圈一起操作。
# 產生存 7 個顏色字串的陣列
colors = ["red", "orange", "yellow", "green", "blue", "indigo", "purple"]
# 產生有 3 個位置的空陣列,再設定城市名稱
cities = Array.new(3)
cities[2] = "Taipei"
cities[1] = "Taichung"
cities[2] = "Kaohsiung"
# 印出第 0 個城市 (Taipei)
puts cities[0]
# 印出 7 個顏色
colors.each do |c|
puts c
end
和陣列一樣可以存一堆資料的集合,但每個資料都要有不重複的名字(key),對應到一個值(value)
# 設定 3 個人的年齡
ages = {:Jack => 10, :"Jason"=> 12, :"Jerry"=> 18}
# 取出 Jack 的年齡
puts ages[:Jack]
# 印出人名(key)和年齡(age)
ages.each do |name, age|
puts "#{name} is #{age} years old"
end
把將一些程式邏輯放到 function,就不用每次都打一樣的程式碼,直接呼叫 function 就好。
# 先定義 function
def self_introduction(name, age, city)
puts "My name is #{name}. I am #{age} years old. I live in #{city}"
end
# 呼叫 function
self_introduction("Jack", 11, "Taipei")
# 印出 Jack 的自我介紹
self_introduction("Jason", 15, "Taichung")
# 印出 Jason 的自我介紹
Ruby中每樣東西都是物件。要定義一個物件,我們會想要知道它包含了哪些資料,以及它能做什麼事情。Class 就是物件的藍圖,定義了物件的狀態和行為。
# 定義 class
class Dog
# 定義資料: 狗的名字
def initialize(name)
@name = name
end
# 定義行為: 跑
def run()
puts "#{@name} runs"
end
# 定義行為: 吃
def eat(food)
puts "#{@name} eats #{food}"
end
end
# 用藍圖做出一個物件
dog = Dog.new("小白")
# 執行物件行為
dog.run()
dog.eat("meat")
之前介紹計算機時,有提到說計算機是有無數小開關組成。一些小開關組合成元件,元件再組成更大的原件,一層一層疊加上去,最後才會組成電腦。程式也是相同的道理,我們可以自己從最基本的程式碼開始,寫出一些程式邏輯,把一些相關的程式邏輯包裝成 class、module。更方便的是,我們甚至不需要每次都從頭開始自己寫程式。許多人會將他們寫的程式碼公開、製作成套件,而我們只需要使用套件管理器 gem
就能「安裝」套件,再引入套件就能使用別人已經寫好的功能,不需要自己再重新造輪子。
# 安裝網頁框架 rails
gem install rails
# 安裝資料庫 API
gem install mysql2
# 引入套件
require "mysql2"
# 使用套件
client = Mysql2::Client.new(:host => "localhost", :username => "root", :database => "db", :password => "password")