iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0

Function 函式

今天,我們要來討論讓軟體工程更上一層樓的概念 - 函式,
因為函示,讓程式語言可以模擬更複雜的工作,
真正的讓電腦有個腦袋的感覺,而不是只能做簡單的計算功能!

函式,可以說是一種小型程式,
例如我們有以下這種小型程式:,幫我們替學生加分並印出分數:

grade = 60 
grade = ( grade * 1.2 ) + 10
if grade > 100
	grade = 100
end

puts grade

那我們可以把它包裝起來,變成一個『函式』:

def add_grade( grade )
    grade = 60 
    grade = ( grade * 1.2 ) + 10
    if grade > 100
    	grade = 100
     end
     puts grade
end

add_grade(60)

上面的這個函式,有三個概念,『宣告』、『參數』和『執行』

宣告

在第一行我們能看見『def add_grade』這兩個詞,
他的意義就是『宣告一個叫做 add_grade 的函式』,
在 Javascript, Java 等語言中,都慣用 function 來做宣告詞,
所以可能會變成長得像: 『 function add_grade 』,
是 Ruby 比較特別,使用『 def 』這個詞。

參數

在第一行的後面,同時有個『 ( grade ) 』這樣的詞彙,
這個詞彙指的是參數。
因為不同的函式,會根據不同的參數產生不同的結果,
我們不可能加分程式永遠都從 60 分去加,
這樣大家都同一個分數,好棒棒好沒有意義,
因此會需要把參數傳入。
而這個函式就會有個參數叫做『grade』,
因此如果把 80 傳進去這個函式內,
grade 就會是 80,傳入 90 ,grade 就會是 90。
值得注意的是,在一些比較嚴謹的程式語言,
還要去設定參數的資料型態,避免執行時出問題,
但像 Ruby 就不需要去做這個設定。

執行

我們『宣告』並設定好『參數』後,
就可以獲得一個叫做『 add_grade 』的函式,
而要執行這個函式,就在後面加上一對小括號『 () 』,
就可以執行這個函式裡的程式了,
如果函式需要參數,再直接寫在小括號裡就好,
就會像最後一行的『 add_grade( grade ) 』。
如果想要傳入兩個參數,可以用逗號『 , 』隔開,寫成這樣子:


def add_grade( grade, rate )
    grade = 60 
    grade = ( grade * rate ) + 10
    if grade > 100
    	grade = 100
     end
     puts grade
end

add_grade(60, 1.2)

這樣,就是一個簡單的函式了。

return

再來要講的是很常被用到的保留字『 return 』,
他可以寫在函示中,把運算好的值給回傳回去。
例如上面的程式碼可以改寫成:


def add_grade( grade, rate )
    grade = 60 
    grade = ( grade * rate ) + 10
    if grade > 100
    	grade = 100
     end
     return grade
end

puts add_grade(60, 1.2)

這樣函示在運算過程最後,就會把 grade 這個變數裡的值回傳,
因此 puts 要印的東西就會是 add_grade 這個函式的回傳的 grade。

用途

透過函式,我們可以把一些常用的程式碼,包裝起來,
等到要使用時,直接呼叫那個函式去執行它,
就不會整個專案裡面都是一堆重複的程式碼,
要改一下公式,還要一個一個複製貼上,當時間很多一樣(茶

另外我們也可以結構化我們的程式,
例如要做一件超複雜的工作,改成績,就可以包裝寫成這樣:

answer = "ABCDABC"
grade = get_grade(answer)

go_to_bathroom()
say_dirty_word()
thinking_why_to_be_a_teacher()

grade = add_grade(grade, 1.3)
send_grade()

上面就清楚描述完了一個老師改考卷的心路歷程,
我們要看細部的邏輯,再點入包好的函示內確認就好了,
這樣可以幫助我們更清晰的理解我們的程式,並模組化囉~

如果有任何問題,或是指證文中的錯誤,歡迎寄信給我或留言在下面喔~


上一篇
[Day9] API Server ( 實務 )
下一篇
[Day11] Object 物件
系列文
菜鳥後端工程師的第一門課30

尚未有邦友留言

立即登入留言