iT邦幫忙

2021 iThome 鐵人賽

DAY 22
1
Software Development

溫柔學姐的Kotlin補課/教學系列 第 22

語法糖小測驗: Scope functions & Extension function

  • 分享至 

  • xImage
  •  

最近補課的模式有了改變,大部分時間都是詩憶讀著講義,遇到問題或是想要學得更深入的時候再和唯心討論。

比如說現在詩憶剛讀完新的章節,打算進行歸納。

「學姐妳之前提過,程式進化是為了讓程式工程師更容易開發程式,那語法糖也可以算在內吧?」

「當然是呀。只是各家程式語言的語法糖都不一樣,所以也相對提高切換語言的門檻。」

「學姐還推薦學哪些程式語言呢——為了就業?」

「這個等妳順利通過這次考試後再告訴妳吧,現在來抽考一下妳對Kotlin語法糖的熟悉度。第一題,Scope functions成員之間最大的兩個差異點是什麼?」唯心馬上提問。

詩憶從熱呼呼的記憶裡拉出答案。「函式裡面引用情境物件Context Object的方式的和函式回傳值。」

「沒錯。第二題,引用的時候thisit的差異是什麼?」

thisLambda ReceiveritLambda Argument。」

「唔,雖然沒有錯,但我想要的答案不是這個。我想知道的是,兩者在引用方式時的差異,它們不是只有名字的差異吧?」

詩憶恍然大悟。「喔喔,妳是說這個。thisScope functionsbody擁有主權,可以直接呼叫Context Object的函式而不用帶前綴;it則只是作為一個參數傳入body。」詩憶信心十足地接著說。「我猜第三題就是考回傳值,函式回傳原本的Context Object或是最後一個函式的結果。」

「不錯呢,都還記得很清楚。那Scope functions分類也沒問題囉。」唯心將三種分類方式——引用情境物件、回傳值、函式是Extension Functions——列在紙上遞給她。

詩憶依序填上答案。

引用情境物件:
this.runwith(x).apply
it.let.also

回傳值:
Lambda Result.let.runrunwith(x)
Context Object.apply.also

函式是Extension Functions.let.run.apply.also

「學姐,為什麼要特別歸類是不是Extension Functions呢?」

「因為Extension Functions比較適合Functional Programming的設計風格。比起把物件當作參數傳入函式去做變化,Functional Programming希望由物件呼叫函式,由函式引領變化,也比較容易編寫測試情境。」

//Extension Functions
drink.xxx()
//Other Functions
xxx(drink)

「唔,是這樣啊,也就是說不是所有程式語言都有Extension Functions了?」

「嗯。不過程式語言之間也會互相學習,過去沒有的,現在也許也會開始支援,所以使用程式語言的時候也要注意使用的是哪個版本。」

「喔喔。」

「既然都說到這了,就出幾個Extension Functions題目給妳吧!」

「咦——」


上一篇
餅乾的危險性:函式庫 Library
下一篇
程式精煉唯熟練爾:高階函式 預設參數 high-order function, default parameter
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言