【kotlin】let with run apply also

2024-02-13 11:20
文章标签 apply kotlin run also let

本文主要是介绍【kotlin】let with run apply also,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

新学kotlin,记录一些函数的例子,直接上具体使用,看demo就好。
转自:

文章目录

    • let
    • with
    • run
    • apply
    • also

let

kotlin、java代码对比:

 //kotlinfun main(args: Array<String>) {val result = "testLet".let {println(it.length)1000}println(result)}//javapublic final class LetFunctionKt {public static final void main(@NotNull String[] args) {Intrinsics.checkParameterIsNotNull(args, "args");String var2 = "testLet";int var4 = var2.length();System.out.println(var4);int result = 1000;System.out.println(result);}
}

使用kotlin前后代码对比:

mVideoPlayer?.setVideoView(activity.course_video_view)mVideoPlayer?.setControllerView(activity.course_video_controller_view)mVideoPlayer?.setCurtainView(activity.course_video_curtain_view)mVideoPlayer?.let {it.setVideoView(activity.course_video_view)it.setControllerView(activity.course_video_controller_view)it.setCurtainView(activity.course_video_curtain_view)
}

with

kotlin、java代码对比:

//kotlinfun main(args: Array<String>) {val user = User("Kotlin", 1, "1111111")val result = with(user) {println("my name is $name, I am $age years old, my phone number is $phoneNum")1000}println("result: $result")
}//javapublic static final void main(@NotNull String[] args) {Intrinsics.checkParameterIsNotNull(args, "args");User user = new User("Kotlin", 1, "1111111");String var4 = "my name is " + user.getName() + ", I am " + user.getAge() + " years old, my phone number is " + user.getPhoneNum();System.out.println(var4);int result = 1000;String var3 = "result: " + result;System.out.println(var3);}

使用kotlin前后代码对比:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {ArticleSnippet item = getItem(position);if (item == null) {return;}holder.tvNewsTitle.setText(StringUtils.trimToEmpty(item.titleEn));holder.tvNewsSummary.setText(StringUtils.trimToEmpty(item.summary));String gradeInfo = "难度:" + item.gradeInfo;String wordCount = "单词数:" + item.length;String reviewNum = "读后感:" + item.numReviews;String extraInfo = gradeInfo + " | " + wordCount + " | " + reviewNum;holder.tvExtraInfo.setText(extraInfo);...
}override fun onBindViewHolder(holder: ViewHolder, position: Int){val item = getItem(position)?: returnwith(item){holder.tvNewsTitle.text = StringUtils.trimToEmpty(titleEn)holder.tvNewsSummary.text = StringUtils.trimToEmpty(summary)holder.tvExtraInf.text = "难度:$gradeInfo | 单词数:$length | 读后感: $numReviews"...   }}

run

run函数实际上可以说是let和with两个函数的结合体。

kotlin、java代码对比:

//kotlinfun main(args: Array<String>) {val user = User("Kotlin", 1, "1111111")val result = user.run {println("my name is $name, I am $age years old, my phone number is $phoneNum")1000}println("result: $result")
}//javapublic static final void main(@NotNull String[] args) {Intrinsics.checkParameterIsNotNull(args, "args");User user = new User("Kotlin", 1, "1111111");String var5 = "my name is " + user.getName() + ", I am " + user.getAge() + " years old, my phone number is " + user.getPhoneNum();System.out.println(var5);int result = 1000;String var3 = "result: " + result;System.out.println(var3);}

run函数使用前后的对比

override fun onBindViewHolder(holder: ViewHolder, position: Int){val item = getItem(position)?: returnwith(item){holder.tvNewsTitle.text = StringUtils.trimToEmpty(titleEn)holder.tvNewsSummary.text = StringUtils.trimToEmpty(summary)holder.tvExtraInf = "难度:$gradeInfo | 单词数:$length | 读后感: $numReviews"...   }}override fun onBindViewHolder(holder: ViewHolder, position: Int){getItem(position)?.run{holder.tvNewsTitle.text = StringUtils.trimToEmpty(titleEn)holder.tvNewsSummary.text = StringUtils.trimToEmpty(summary)holder.tvExtraInf = "难度:$gradeInfo | 单词数:$length | 读后感: $numReviews"...   }}

apply

整体作用功能和run函数很像,唯一不同点就是它返回的值是对象本身,而run函数是一个闭包形式返回,返回的是最后一行的值。
使用前后对比

mSheetDialogView = View.inflate(activity, R.layout.biz_exam_plan_layout_sheet_inner, null)mSheetDialogView.course_comment_tv_label.paint.isFakeBoldText = truemSheetDialogView.course_comment_tv_score.paint.isFakeBoldText = truemSheetDialogView.course_comment_tv_cancel.paint.isFakeBoldText = truemSheetDialogView.course_comment_tv_confirm.paint.isFakeBoldText = truemSheetDialogView.course_comment_seek_bar.max = 10mSheetDialogView.course_comment_seek_bar.progress = 0mSheetDialogView = View.inflate(activity, R.layout.biz_exam_plan_layout_sheet_inner, null).apply{course_comment_tv_label.paint.isFakeBoldText = truecourse_comment_tv_score.paint.isFakeBoldText = truecourse_comment_tv_cancel.paint.isFakeBoldText = truecourse_comment_tv_confirm.paint.isFakeBoldText = truecourse_comment_seek_bar.max = 10course_comment_seek_bar.progress = 0}

多层判空问题

mSectionMetaData?.apply{//mSectionMetaData不为空的时候操作mSectionMetaData}?.questionnaire?.apply{//questionnaire不为空的时候操作questionnaire}?.section?.apply{//section不为空的时候操作section}?.sectionArticle?.apply{//sectionArticle不为空的时候操作sectionArticle}

also

also函数和let很像,只是唯一的不同点就是let函数最后的返回值是最后一行的返回值而also函数的返回值是返回当前的这个对象。一般可用于多个扩展函数链式调用

在这里插入图片描述

这篇关于【kotlin】let with run apply also的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705403

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

kotlin中的数据转换方法(示例详解)

《kotlin中的数据转换方法(示例详解)》这篇文章介绍了Kotlin中将数字转换为字符串和字符串转换为数字的多种方法,包括使用`toString()`、字符串模板、格式化字符串、处理可空类型等,同时... 目录1. 直接使用 toString() 方法2. 字符串模板(自动转换)3. 格式化字符串(控制输

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

python subprocess.run中的具体使用

《pythonsubprocess.run中的具体使用》subprocess.run是Python3.5及以上版本中用于运行子进程的函数,它提供了更简单和更强大的方式来创建和管理子进程,本文就来详细... 目录一、详解1.1、基本用法1.2、参数详解1.3、返回值1.4、示例1.5、总结二、subproce

【JavaScript】let与var的区别及变量、函数提升

有var与无var的区别   在函数内部,有var和没var声明的变量是不一样的。有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口。 let与var的区别   在上面代码中,我们使用var语句声明变量x。因此,变量x的范围是函数范围。if语句内的变量x就是if语句外创建的变量x。因此,在你修改if语句块内变量x的值的时候,也会修改函数中变量x的所有引用的

Kotlin高阶函数与Lambda表达式及内联函数的介绍

目录 1、高阶函数1.1、什么是高阶函数?1.1.1、不带返回值的高阶函数1.1.2、带参数且带返回值的高阶函数1.1.3、与一般的函数进行比较 1.2、如何使用?1.3、高阶函数有什么作用? 2、Lambda表达式2.1、什么是Lambda表达式?2.1.1、无参数的写法2.1.2、有参数的写法2.1.3、有参数且有返回值的写法 2.2、如何使用?2.3、Lambda表达式有什么作用? 3