【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

相关文章

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

Kotlin运算符重载函数及作用场景

《Kotlin运算符重载函数及作用场景》在Kotlin里,运算符重载函数允许为自定义类型重新定义现有的运算符(如+-…)行为,从而让自定义类型能像内置类型那样使用运算符,本文给大家介绍Kotlin运算... 目录基本语法作用场景类对象数据类型接口注意事项在 Kotlin 里,运算符重载函数允许为自定义类型重

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

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