程序精炼唯熟练尔:高阶函式 预设参数 high-order function, default parameter

「在写什麽呀?」唯心用手指戳了戳诗忆的额头。「眉头都皱起来了。」

「喔,学姐,我在练习高阶函式,把函式命名成变数很容易,但是写成参数的时候感觉怪怪的,达不到想要的结果。」

「你想写什麽?」

「我想写一个每次列印都会附带喵喵叫的函式,目前写出来的却只印出meow~的部分。」

fun main() {
    meowPrint(printer = { println("meow~") })
}

fun meowPrint(string: String = "Hello World", printer: (String)-> Unit) {
    printer(string)
}

唯心看了一遍程序内容。「喔,这是因为你固定println的传入参数值了呀,你的写法和下面的写法是等价的。你都会写Hello World这种预设参数了,没想到却会卡在这里啊。」

fun main() {
    meowPrint(printer = { string: String -> println("meow~") })
}

fun meowPrint(string: String = "Hello World", printer: (String)-> Unit) {
    printer(string)
}

「原来如此,学姐,我懂了,我再改改看。」

fun main() {
    meowPrint(printer = { string: String -> println(string)})
}

fun meowPrint(string: String = "Hello World", printer: (String)-> Unit) {
    printer(string)
    printer("meow~")
}

这次程序总算印出诗忆期待的结果。

Hello World
meow~

今天订下的练习目标达到後,她便放宽心情和唯心聊起来。「预设参数真的很方便,之前学姐提过的overloading多载,本以为参数不同只能写成多个函式,没想到也可以用预设参数的写法来处理。」

「对呀。程序写得越多,就可以找到更精炼的写法。」唯心微笑称赞诗忆写法的优点。「就像如果有指定参数名称,就不用在意参数的顺序。」


<<:  Day 13 - OOP 初探 (3) - 实战地图游戏

>>:  预编译

Leetcode: 114. Flatten Binary Tree to Linked List | 含C++笔记

把二元树展开成linked list,而且顺序要跟preorder traversal一样,三种tr...

[Day_3] Python运算子

运算子 今天这篇主要会介绍一些运算子, 不一定都是数学上的运算, 也有判断True或False的, ...

Day 17 - 成长曲线N+1 : AIGO教练培训

图片来源 谈了好几天的AI相关议题, 其实主要也是因为之前的分享中有提到, 我是偶然间在今年七月初...

Day 10 实用的 let 方法以及客制化错误讯息!

该文章同步发布於:我的部落格 改变数值的时候 昨天提到变动性的问题是什麽呢? 我们到现在的测试都是...

英雄列表范例:删除英雄

接下来介绍「删除英雄」的实作方法。 删除介面设计 我规划是在每个项目後面增加一个删除按钮,按下该按钮...