最近补课的模式有了改变,大部分时间都是诗忆读着讲义,遇到问题或是想要学得更深入的时候再和唯心讨论。
比如说现在诗忆刚读完新的章节,打算进行归纳。
「学姐你之前提过,程序进化是为了让程序工程师更容易开发程序,那语法糖也可以算在内吧?」
「当然是呀。只是各家程序语言的语法糖都不一样,所以也相对提高切换语言的门槛。」
「学姐还推荐学哪些程序语言呢——为了就业?」
「这个等你顺利通过这次考试後再告诉你吧,现在来抽考一下你对Kotlin语法糖的熟悉度。第一题,Scope functions
成员之间最大的两个差异点是什麽?」唯心马上提问。
诗忆从热呼呼的记忆里拉出答案。「函式里面引用情境物件Context Object
的方式的和函式回传值。」
「没错。第二题,引用的时候this
和it
的差异是什麽?」
「this
是Lambda Receiver
,it
是Lambda Argument
。」
「唔,虽然没有错,但我想要的答案不是这个。我想知道的是,两者在引用方式时的差异,它们不是只有名字的差异吧?」
诗忆恍然大悟。「喔喔,你是说这个。this
在Scope functions
的body
拥有主权,可以直接呼叫Context Object
的函式而不用带前缀;it
则只是作为一个参数传入body
。」诗忆信心十足地接着说。「我猜第三题就是考回传值,函式回传原本的Context Object
或是最後一个函式的结果。」
「不错呢,都还记得很清楚。那Scope functions
分类也没问题罗。」唯心将三种分类方式——引用情境物件、回传值、函式是Extension Functions
——列在纸上递给她。
诗忆依序填上答案。
引用情境物件:
this
:.run
、with(x)
、.apply
it
:.let
、.also
回传值:
Lambda Result
:.let
、.run
、run
、with(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
7.3 eventual consistency 还没写QQ 这章会来聊聊 consistency...
找水电、装潢师傅,大家都怎麽找? 亲友介绍?路边的实体店面?看附近有没有贴纸? 那些年,遇到的水电装...
引用 Shioaji 要使用 shioaji 的话,一开始要先引用,这一段就是引用并给予一个简称 s...
新增一个C# Sprite并命名为PlayerController後开始撰写程序码 using Un...
来到操控滑鼠和物体互动的环节啦! 其实这个环节走完就有很多很多的互动可以做了,不知道讲到简单点击或拖...