這個練習會帶你認識 Ruby 最基礎的組成要素。
它涵蓋的範圍很廣,但如果覺得有點吃不消,別擔心喔,隨著我們繼續這條學習路徑,之後每一項都會更深入地介紹。
要理解 Ruby,其中一個關鍵是它是一門物件導向語言,而且Ruby 裡的所有東西都是物件。數字、字串、陣列,它們通通都是物件。
我們通常會透過幫物件命名來使用它們,命名的方式可以是變數或常數。
變數一律以蛇形命名法書寫。
同一個變數在其生命週期內可以指向不同的物件。
例如,my_first_variable可以用=運算子一再定義與重新定義:
my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new
不過,常數只應該被指定一次。 常數必須以大寫字母開頭,而且通常全部以大寫書寫,字詞之間用底線分隔。 例如:
MY_FIRST_CONSTANT = 10
# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"
Ruby 是以類別來組織的。
類別是使用class關鍵字定義的,後面接著類別名稱。
一般來說,物件是透過.new方法將類別實例化而建立。
例如:
# Define the class
class Calculator
#...
end
# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new
功能單位會被封裝在方法裡,這點和其他語言的_函式_很像。
方法可以用位置引數或關鍵字引數(定義與呼叫時使用:語法)來定義,也可以完全沒有引數。
方法會隱式回傳最後一個被求值敘述的結果,也可以透過return關鍵字明確地回傳一個物件。
class Calculator
# Positional arguments
def add(num1, num2)
return num1 + num2 # Explicit return
end
# Keyword arguments
def multiply(num1:, num2:)
num1 * num2 # Implicit return
end
end
方法使用.語法呼叫:
calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)
在這項練習中,你將撰寫一些程式碼,幫助你依照最愛的食譜做出一份美味的千層麵。
這項練習有四個任務,全都和烹調千層麵所花費的時間有關。
定義Lasagna::EXPECTED_MINUTES_IN_OVEN常數,它會回傳千層麵應該在烤箱裡烤幾分鐘。根據食譜,預期的烤箱時間是 40 分鐘:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
定義Lasagna#remaining_minutes_in_oven方法,它接受千層麵實際已待在烤箱中的分鐘數作為參數,並根據前一個任務中預期的烤箱時間,回傳千層麵還需要待在烤箱裡幾分鐘。
lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10
定義Lasagna#preparation_time_in_minutes方法,它接受你加進千層麵的層數作為參數,並回傳你準備千層麵花了幾分鐘,假設每一層需要花你 2 分鐘準備。
lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4
定義Lasagna#total_time_in_minutes方法,它接受兩個具名參數:number_of_layers參數是你加進千層麵的層數,而actual_minutes_in_oven參數是千層麵待在烤箱中的分鐘數。這個函式應該回傳你烹調千層麵總共花了幾分鐘,也就是準備時間(分鐘)與千層麵當下已待在烤箱中的分鐘數之和。
lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26