2024年通过示例理解带有接收器的 Kotlin 函数字面量_navgraphbuilder,HarmonyOS鸿蒙开发自学教程

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

下面显示了一些使用带有接收器的函数文字构建自定义字符串的示例。

示例:带有接收器的函数文字

fun buildCustomStringExample1(
    action: StringBuilder.(String) -> Unit): String {

    val stringBuilder = StringBuilder()
    stringBuilder.action("Example1")
    return stringBuilder.toString()
}

action是带有接收器的函数文字/ lambda 函数。StringBuilder是接收者。它就像一个扩展函数,StringBuilder它接受stringas 输入参数。

调用action,StringBuilder被实例化,像扩展函数一样调用它 -stringBuilder.action(“Example1”)

你可以想象action它就像一个回调函数,属于StringBuilder.

用法

这是函数文字与接收器的用法:

val output1 = buildCustomStringExample1 { content ->
    this.append("<tag>")
    append("$content") 
    append("</tag>")
}
println("$output1")

我们调用buildCustomStringExample1with 函数字面量 / lambda 函数参数。在这个 lambda 函数中,我们指定了如何构建自定义字符串 - 用"“和包装内容”"。

content是从buildCustomStringExample1函数传入的输入参数。this是StringBuilder在函数中创建的实例,buildCustomStringExample1()可以省略。append()是属于的函数StringBuilder。

[更新 - 22 年 6 月 12 日]:我最近了解到这种用法称为域指定语言 (DSL)。因此,带有接收器的函数字面量用于构建 DSL。主要目的是为了可读性。

输出

输出如下所示:

<tag>Example1</tag>

示例 2:没有接收器的函数字面量
可以根据以下语法在不使用接收器的情况下重写带有接收器的函数文字/ lambda 函数:

(接收器,参数)→ ReturnType

这是通常的lambda 表达式,它接受 2 个参数。第一个参数是,StringBuilder也就是上面例子1中的receiver。

fun buildCustomStringExample2(
    action: (StringBuilder, String) -> Unit
): String {

    val stringBuilder = StringBuilder()
    action(stringBuilder, "Example2")
    return stringBuilder.toString()
}

action是通常的回调函数,它接受 2 个参数。调用action,StringBuilder被实例化,并作为action回调函数的第一个参数传入 -action(stringBuilder, “Example2”)

用法

这是没有接收器的函数文字的用法:

val output2 = buildCustomStringExample2 { stringBuilder, content ->
    stringBuilder.append("<tag>")
    stringBuilder.append("$content")
    stringBuilder.append("</tag>")


**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

![](https://i-blog.csdnimg.cn/blog_migrate/1e210328c1ebf43f08d3b6c5f5c13b48.png)
![img](https://img-blog.csdnimg.cn/img_convert/bf09107f5e9e74c0eb2f0779bc38b477.png)
![img](https://img-blog.csdnimg.cn/img_convert/8e60588141f865a0ed210206b3bd1f25.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**

**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值