语法糖小测验: Scope functions & Extension function

最近补课的模式有了改变,大部分时间都是诗忆读着讲义,遇到问题或是想要学得更深入的时候再和唯心讨论。

比如说现在诗忆刚读完新的章节,打算进行归纳。

「学姐你之前提过,程序进化是为了让程序工程师更容易开发程序,那语法糖也可以算在内吧?」

「当然是呀。只是各家程序语言的语法糖都不一样,所以也相对提高切换语言的门槛。」

「学姐还推荐学哪些程序语言呢——为了就业?」

「这个等你顺利通过这次考试後再告诉你吧,现在来抽考一下你对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题目给你吧!」

「咦——」


<<:  电子书阅读器上的浏览器 [Day28] 上架到 F-Droid

>>:  Ceph and OpenStack - Best Practices Part I

【Day 9】Replica 之间的一致性

7.3 eventual consistency 还没写QQ 这章会来聊聊 consistency...

大共享时代系列_019_水电、装潢、建筑工程交流与媒合

找水电、装潢师傅,大家都怎麽找? 亲友介绍?路边的实体店面?看附近有没有贴纸? 那些年,遇到的水电装...

基本操作 - 登入,取得市场清单

引用 Shioaji 要使用 shioaji 的话,一开始要先引用,这一段就是引用并给予一个简称 s...

[第二十八天]从0开始的UnityAR手机游戏开发-虚拟摇杆 Joystick 02

新增一个C# Sprite并命名为PlayerController後开始撰写程序码 using Un...

Day17. 老鼠,老虎傻傻分不清楚?- Mouse(下)

来到操控滑鼠和物体互动的环节啦! 其实这个环节走完就有很多很多的互动可以做了,不知道讲到简单点击或拖...