kotlin的let,with,run,apply,also,异同区别

kotlin的let,with,run,apply,also,异同区别

例如:

class Person(var name: String, var age: Int) {
    fun eat() {
        println("吃饭")
    }

    fun work(hour: Int): Int {
        println("$name $age 工作 $hour,赚${hour * 60}")
        return hour * 60
    }
}

fun main(args: Array<String>) {
    var s: String? = null

    //没用let前,每个都要加 ? 判断是否为空
    val len = s?.length
    var ss = s?.toByte()

    println(len)
    println(ss)

    //使用let后,只需加一次?判空
    s?.let {
        val len = it.length
        it.toByte()
    }



    val person = Person("zhang", 18)

    /**
     * with()把传入的对象作为接受者,函数内可使用this指代该对象来访问公有属性和方法。
     * 函数的返回值为函数块最后一行或指定的return表达式。
     */
    val result1 = with(person) {
        age = 19
        eat()
        work(996)
    }
    println("结果1:$result1")
    println("----------")


    /**
     * run()是with()和let()的结合,它可以像with()一样在函数体中使用this指代该对象,也可以像let()一样为对象做判空。
     */
    val result2 = person?.run() {
        age = 20
        work(996)
        eat()
    }
    println("结果2:$result2")
    println("----------")


    /**
     * apply()和run()相似,不同的是,run()返回最后一行代码的值,而apply()返回传入的对象本身。
     */
    val result3 = person?.apply {
        age = 21
        eat()
        work(996) // 返回person对象
    }
    println("结果3:$result3")
    println("----------")

    /**
     * also()和apply()相似,不同的是,also()在函数体内用it指代该对象,而apply()在函数体中用this指代该对象。
     */
    val result4 = person?.also {
        it.age = 22
        it.eat()
        it.work(996) // 返回传入的person对象
    }
    println("结果4:$result4")
    println("----------")
}

输出:

null
null
吃饭
zhang 19 工作 996,赚59760
结果1:59760
----------
zhang 20 工作 996,赚59760
吃饭
结果2:kotlin.Unit
----------
吃饭
zhang 21 工作 996,赚59760
结果3:Person@7530d0a
----------
吃饭
zhang 22 工作 996,赚59760
结果4:Person@7530d0a
----------

kotlin常用表达式let,?:,as?,?.,!!_zhangphil的博客-CSDN博客it.todo() //函数内使用it替代object对象访问属性和方法。it.todo() //object不为null,才会执行let函数。当a不为null时,执行大括号里的语句(it肯定不为null)如果a == null ,则为 null。= null,则a.b()如果 a 不是 b,则为 null。如果a 是 b,则 a as b。当a为null时,什么都不执行。如果a==null,抛出空指针。=null时,执行a。当a==null时,执行b。https://blog.csdn.net/zhangphil/article/details/129264159

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/14997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redmine问题跟踪系统4.1版本一键安装包下载

很好用的项目管理&#xff0c;缺陷跟踪系统&#xff0c;开源免费使用 Version 4.1.1-4 2020-08-31 由 redmineplugins.cn Admin 在 超过 2 年 之前添加 Version 4.1.1-4 2020-08-31 Maintenance releaseUpdated Apache to 2.4.46Updated Git to 2.28.0Updated PHP to 7.3.21U…

PHP 实现会话Session信息共享

目录 解决方案也有很多种&#xff1a; 会话保持 会话复制 会话共享 环境准备 架构设计 SessionHandlerInterface接口 代码编写 总结 优化 前言&#xff1a; 小流量的网站中&#xff0c;我们往往只需要一台服务器就可以维持用户正常的访问以及相关的操作。 随着网站的…

Jetpack Compose之线性布局和帧布局

作者&#xff1a;海塔灯 概述 Compose 中的线性布局对应的是Android传统视图中的LinearLayout,不一样的地方是&#xff0c;Compose根据Orientation的不同又将布局分为Column和Row, Column对应传统视图LinearLayout中orientation “vertical”的情况&#xff0c;Row对应传统视…

【AI炼丹术】写深度学习代码的一些心得体会

写深度学习代码的一些心得体会 体会1体会2体会3总结内容来源 一般情况下&#xff0c;拿到一批数据之后&#xff0c;首先会根据任务先用领域内经典的Model作为baseline跑通&#xff0c;然后再在这个框架内加入自己设计的Model&#xff0c;微调代码以及修改一些超参数即可。总体流…

RocketMQ第一节(MQ的初步了解)

目录 1&#xff1a;什么是消息队列 2&#xff1a;MQ的基础模型 3&#xff1a;MQ的作用 3.1&#xff1a;MQ用来解耦 3.2&#xff1a; 削峰填谷 4&#xff1a;MQ怎么选 1&#xff1a;什么是消息队列 MQ全称是Message Queue (消息队列)&#xff0c;是消息传输中间件&#xf…

huggingface下载的.arrow数据集读取与使用说明

1.数据下载方式&#xff1a;load_dataset 将数据集下载到本地&#xff1a;&#xff08;此处下载的是一个物体目标检测的数据集&#xff09; from datasets import load_dataset # 下载的数据集名称, model_name keremberke/plane-detection # 数据集保存的路径 save_path da…

mac十大必备软件排行榜 mac垃圾清理软件哪个好

刚拿到全新的mac电脑却不知道该怎么使用&#xff1f;首先应该装什么软件呢&#xff1f;如果你有同样的疑惑&#xff0c;今天这篇文章一定不要错过。接下来小编为大家介绍mac十大必备软件排行榜&#xff0c;以及mac垃圾清理软件哪个好。 一、mac十大必备软件排行榜 1.CleanMyM…

停车场管理系统的设计与实现_kaic

目 录 1 概 述 1.1研究背景 1.2研究现状 1.3研究内容 2 相关技术简介 2.1 JSP技术 2.2 JAVA技术 2.3 MYSQL数据库 2.4 B/S结构 3 系统需求分析 3.1 系统可行性分析 3.1.1 操作可行性 3.1.2 经济可行性 3.1.3 技术可行性 3.2 系统性能分析 3.3系统流程分析 3.3.1注册流程 3.3.…

智慧园区数字化转型下的移动App发展

随着智慧城市的建设和智慧园区的崛起&#xff0c;智慧园区数字一体化建设成为园区发展的重心&#xff0c;当然数字转型离不开移动应用的整合服务。 在过去的几年中&#xff0c;智慧园区移动应用已经发展成为园区管理和服务的重要手段之一&#xff0c;为企业和员工提供了更加便…

Machine Learning-Ex6(吴恩达课后习题)Support Vector Machines

目录 1. Support Vector Machines 1.1 Example Dataset 1 1.2 SVM with Gaussian Kernels 1.2.1 Gaussian Kernel 1.2.2 Example Dataset 2 1.2.3 Example Dataset 3 2. Spam Classification 2.1 Preprocessing Emails 2.1.1 Vocabulary List 2.2 Extracting Feature…

安卓GB28181-2022 RTP over TCP

使用TCP传输RTP包&#xff0c;GB28181-2016和GB28181-2022 都是按IETF RFC4571来的。使用TCP发送RTP包&#xff0c;前面加个16位无符号长度字段就好(网络字节序)。具体定义格式如下&#xff1a; 需要注意的是LENGTH值可以是0&#xff0c;0的话表示空包; 另外UDP传输RTP包&#…

第二届易派客工业品展圆满落幕 3天超7万人次观展

4月15日&#xff0c;第二届易派客工业品展览会在苏州国际博览中心成功闭幕&#xff0c;展会期间共7.4万人次观展。展会以“绿色•智造•融通•赋能”为主题&#xff0c;为参展企业衔接供需、共享商机、共促发展提供平台&#xff0c;推动工业企业数字化转型、致力供应链优化升级…

blast的-max_target_seqs?

Shah, N., Nute, M.G., Warnow, T., and Pop, M. (2018). Misunderstood parameter of NCBI BLAST impacts the correctness of bioinformatics workflows. Bioinformatics. 杂志Bioinformatics以letter to the editor的形式刊发了来自美国马里兰大学计算机系的Nidhi Shah等人…

powershell搞定烦人的Windows Defender

0x00 Windows Defender真烦 最近装了不少虚拟机&#xff0c;发现目前较新版本的windows Defender是真的烦&#xff0c;关了一段时间后&#xff0c;自己又打开。特别是装了域控后的winserver 2016&#xff0c;半都关不掉&#xff0c;做个实验是真烦。 顺手去查了下如何使用pow…

ThinkPHP模型操作上

ThinkPHP模型操作上 前言模型一、创建模型二、模型操作 总结 前言 在mvc架构中&#xff0c;模型的解释是写逻辑代码的地方&#xff0c;其实还可以这样理解&#xff0c;就是一串操作写在一个模型类中&#xff0c;就是你要完成某一项功能&#xff0c;将这个功能的代码写在一个mod…

2023年产业基金研究报告

第一章 行业概况 1.1 概述 产业基金&#xff0c;又称为产业投资基金&#xff0c;是一种由政府、企业、金融机构等出资设立的&#xff0c;专门用于支持和促进特定产业发展的投资基金。产业基金通常以股权投资和长期投资为主&#xff0c;旨在推动产业结构升级、促进科技创新、提…

基于ResNet-attention的负荷预测

一、attention机制 注意力模型最近几年在深度学习各个领域被广泛使用&#xff0c;无论是图像处理、语音识别还是自然语言处理的各种不同类型的任务中&#xff0c;都很容易遇到注意力模型的身影。从注意力模型的命名方式看&#xff0c;很明显其借鉴了人类的注意力机制。我们来看…

融云 CTO 岑裕:出海技术前沿探索和排「坑」实践

在本文中&#xff0c;你将看到以下内容&#xff1a; 全球通信网络在接入点、链路加速、服务商、协议等层面的动态演进&#xff1b; 进入到具体市场&#xff0c;禁运国、跨国拦截、区域一致性差等细节“坑点”如何应对&#xff1b; 融云如何从技术侧帮助开发者应对本地化用户体…

Hive与HBase的区别及应用场景

目录&#xff1a; 零、前言一、定义二、区别三、应用场景 零、前言 在学大数据分析的过程中&#xff0c;Hive和HBase是两个非常重要的内容&#xff0c;对于初学者而言容易混淆。所以比较两者区别&#xff0c;能够帮助我们对这两个组件有一个清晰的认识和定位。那么&#xff0c;…

一篇文章看懂MySQL的多表连接(包含左/右/全外连接)

MySQL的多表查询 这是第二次学习多表查询&#xff0c;关于左右连接还是不是很熟悉&#xff0c;因此重新看一下。小目标&#xff1a;一篇文章看懂多表查询&#xff01;&#xff01; 这篇博客是跟着宋红康老师学习的&#xff0c;点击此处查看视频&#xff0c;关于数据库我放在了…