iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
Modern Web

一探紅寶石的神秘面紗 - Ruby 及 Rails入門介紹 系列系列 第 9

Day 9 - 掌握Ruby世界就要先懂:方法

  • 分享至 

  • xImage
  •  

這部分的觀念相當重要喔,大家使用 ruby 主要為了可以好好操作 rails 這個開發框架,裡面內部組成,除了前面的資料類型及邏輯判斷等,再來務必要認識的就是這些方法(Method)跟區塊(Block)的使用了。有一定的認識後進入 rails 的世界才能看懂其中的奧妙呀!

方法 (Method)

為什麼要使用?

有些時候我們會重複做一些指令,如果可以簡單幾行字就能呼叫一連串的指令,然後可以重複利用在不同的地方,就是我們為什麼會要使用方法的原因啦。

如何定義與使用?

如同標題我們要定義就是使用 define 這個英文的簡寫 def 來開頭,後面宣告這個方法的名稱,名稱很重要最好可以清楚表達執行內容,接著就是放入的參數及要執行的內容,最後再加上 end 結束,後面會介紹到這段def...end的範圍稱為區塊,大概會長成這樣:

def say_hello() # 方法名為say_hello,後面括號可以不放參數
  puts "hello"
end

say_hello() # 印出 hello
say_hello # 同上,可以省略括號

參數(parameter)與引數(argument)

很多人都會搞混這部分,認為都是叫做參數。其實是:

  • 參數是在定義方法時後面括號內部物件
  • 引數是在呼叫使用方法時括號內所帶入的物件
def say_hello_to(name) # 放入參數name
  puts "hello, #{name}" # name 所放的引數會被帶入
end

say_hello_to(Sean) # 帶入Sean作為引數,印出 hello, Sean

使用注意參數與引數的數量

必須一個蘿蔔一個坑對入,如果參數有 3 個,只要引數不等於 3 個都是會出錯的!!


def add(a,b,c)
  a + b + c
end

add (1,2) # 出錯,少一個
add (1,2,3,4) # 出錯,多一個

參數預設值

方法的參數可以用 "=" 先預設好喔

def say_hello_to(name ="Ken") # 預設name為"Ken"
  puts "hello, #{name}"
end

say_hello_to(Sean) # 印出 hello, Sean
say_hello_to() # 有預設如果沒引數會自動帶入預設"Ken"作為引數,印出 hello, Ken

回傳

從前面的例子如果有注意到其實方法的最後一行就是所謂的回傳值,注意特別的是 Ruby 中 return 可以適時的省略,自動回傳最後一行。

比較需要注意很多人以為用 puts 印出就表示回傳了,其實 puts 是沒有回傳值的,沒回傳就會回傳 nil。

# puts沒有回傳
def double_num(num)
 puts num * 2 # 印出 2 倍的值,但其實是沒有回傳值的
end
p double_num(5) # 會印出什麼?答案是 10 跟 nil 喔!!

# 回傳值
def double_num(num)
 return num * 2 # 回傳 num*2 ,可以省略return
end
p double_num(5) # 印出 10

? 及 ! 究竟在幹嘛?

  • ? 跟 ! 可以是命名的一部份,但只能放在最後面
  • 問號通常會回傳真假值,而驚嘆號通常表示不是一般方法,需要注意可能會更改原本資料的結構!
def is_adult?(age)
  if age >= 18
    return true
  else
    return false
  end
end
list = [1,4,3,2]

p list.sort # 排序但不改變原本陣列,印出[1,2,3,4]
p list # 原本陣列還是印 [1,4,3,2]
p list.sort! # 排序但改變原本陣列 [1,2,3,4]
p list # 原本陣列改成 [1,2,3,4]

以上針對方法得簡單介紹,嘗試著把好用常用到的方法包起來,需要使用再呼叫出來吧!!


參考資料:

  1. 為你自己學 ruby on rails
  2. Ruby Docs - Method
  3. [Ruby] 方法/函式(function / method)

上一篇
Day 8 - 到Ruby世界就要先懂:迴圈與迭代
下一篇
Day 10 - 掌握Ruby世界就要先懂:區塊
系列文
一探紅寶石的神秘面紗 - Ruby 及 Rails入門介紹 系列30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言