iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

方法 Method

為什麼需要方法?簡單來說就是讓程式碼可以重複使用而且更容易理解

定義方法

在 Ruby 中定義方法的起手式為def

def bmi_calculator(height, weight)
  height_m = height / 100.0
  bmi = (weight / (height_m ** 2)).round(2)
  
  puts "Your BMI is #{bmi}"
end

這邊就定義的一個計算BMI的方法bmi_calculator後面的 height, weight 是這個方法的參數(parameter) 有兩個參數以上請記得用逗號,隔開,方法的命名非常重要,以BMI為例子,即使看不懂中間的程式碼也能透過方法的名字bmi_calculator大概猜出來這是計算BMI的方法,命名方式跟可讀性可說是息息相關。

使用方法

使用方法很簡單,直接呼叫方法跟帶入引數即可

bmi_calculator(180, 80)     # 印出 Your BMI is 24.69

參數與引數 parameter and argument

參數是在定義方法(或函數)時命名的變數,用於接受傳遞給方法的數據而引數是在調用方法時傳遞給方法的實際數據。

參數預設值

在定義方法時,可幫參數加上預設值:

def say_hello_to(name = '漩渦鳴人') 
  puts "Hello #{name}"
end

say_hello_to ('五條悟')    # 印出 Hello 五條悟
say_hello_to              # 印出 Hello 漩渦鳴人

return 回傳值

return 可適時省略,會自動回傳最後一行的執行結果。
以下以台電電費計算為例:

def electricity_cost_calculator(usage, is_summer)
  if usage < 0
    return "用電度數不能為負數"     # return可省略
  end

  rate = case usage
  when 0..120
    1.63
  when 121..330
    is_summer ? 2.38 : 2.10
  when 331..500
    is_summer ? 3.52 : 2.89
  when 501..700
    is_summer ? 4.80 : 3.94
  when 701..1000
    is_summer ? 5.83 : 4.74
  else
    is_summer ? 7.69 : 6.03
  end

  cost = (usage * rate).to_i
  return cost    # return可省略
end


electricity_cost = electricity_cost_calculator(886, false)
puts "電費:#{electricity_cost}元"       # 印出 電費:3597元

問號?與驚嘆號!

? 跟 ! 可以是命名的一部份,但要放在最後

問號通常會回傳布林值就是truefalse,驚嘆號通常表示要注意

使用問號?

在上面的台電電費的參數is_summer就是布林值,我們舉其中一行程式碼來說明:

 when 121..330
    is_summer ? 2.38 : 2.10

當度數在121度到330度之間,如果是夏天is_summer ?加上問號, 是true 條件表達式傳回 2.38 ,反之 false 的話,傳回 2.10

使用驚嘆號!

list = [9, 5, 2, 7]
p list.sort   # 進⾏排序,但不會改變 list 的內容

p list        # 印出 [9, 5, 2, 7]

p list.sort!  # 進⾏排序,並且直接改變 list 的內容

p list        # 印出 [2, 5, 7, 9]

預告

Day 08 預計來介紹迴圈與迭代,我們明天見!


上一篇
Day 06 - Logical Evaluation and Flow Controller邏輯判斷和流程控制
下一篇
Day 08 - Loop and Iteration 迴圈與迭代
系列文
Zero to Ruby on Rails30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言