我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Kotlin作用域函数使用示例详细介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Kotlin作用域函数使用示例详细介绍

这里我们将介绍Kotlin 5个作用域函数:let,run,with,apply,also。

1 let

let 可用于范围界定和空值检查。在对象上调用时,let 执行给定的代码块并返回其最后一个表达式的结果。对象可通过引用它(默认情况下)或自定义名称在块内进行访问。

所以,总结起来,let 有如下三大特征:

// 重点11:使用it替代object对象去访问其公有的属性 & 方法
object.let{
   it.todo()
}
// 重点2:判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
   it.todo()
}
// 重点3:返回值 = 最后一行 / return的表达式

下面是一些例子(我们可以直接在 Kotlin Playground 中运行):

fun customPrint(s: String) {
    print(s.uppercase())
}
fun main() {
    val empty = "test".let {               // Calls the given block on the result on the string "test".
        customPrint(it)                    // 这里的 it 就是 "test",所以 "test" 作为输入给到 customPrint 函数中,打印出大写的 "test"
        it.isEmpty()                       // let 最后返回的是这个,也就是 empty 最终的值是 false
    }
    println(" is empty: $empty")           // 打印结果 TEST is empty: false。这里的 TEST 是 customPrint 函数 的打印结果。注意 print 和 println 的区别
    fun printNonNull(str: String?) {
        println("Printing \"$str\":")
        str?.let {                         // object不为null的条件下,才会去执行let函数体
            print("\t")
            customPrint(it)
            println()                      // 换行。let最后返回的是这一行
        }
    }
    fun printIfBothNonNull(strOne: String?, strTwo: String?) {
        strOne?.let { firstString ->       
            strTwo?.let { secondString ->
                customPrint("$firstString : $secondString")
                println()
            }
        }
    }
    printNonNull(null)                    // 打印 Printing "null":
    printNonNull("my string")             // 打印 Printing "my string":
	                                      // MY STRING
    printIfBothNonNull("First","Second")  // 打印 FIRST : SECOND
}

从另一个方面,我们来比对一下不使用 let 和使用 let 函数的区别。

// 使用kotlin(无使用let函数)
mVar?.function1()
mVar?.function2()
mVar?.function3()
// 使用kotlin(使用let函数)
// 方便了统一判空的处理 & 确定了mVar变量的作用域
mVar?.let {
       it.function1()
       it.function2()
       it.function3()
}

2 run

与 let 函数类似,run 函数也返回最后一条语句。另一方面,与 let 不同,运行函数不支持 it 关键字。所以,run 的作用可以是:

  • 调用同一个对象的多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可
  • 定义一个变量在特定作用域内
  • 统一做判空处理

下面是一些例子:

fun main() {
    fun getNullableLength(ns: String?) {
        println("for \"$ns\":")
        ns?.run {                                                  // 判空处理
            println("\tis empty? " + isEmpty())                    // 这里我们就发现,在 isEmpty 前不再需要 it
            println("\tlength = $length")                           
            length                                                 // run returns the length of the given String if it's not null.
        }
    }
    getNullableLength(null)   
    // 打印 for "null":
    getNullableLength("")
    // 打印 for "":
    //         is empty? true
    //         length = 0
    getNullableLength("some string with Kotlin")
    // 打印 for "some string with Kotlin":
    //         is empty? false
    //         length = 23
    data class People(val name: String, val age: Int) 
    val people = People("carson", 25)
    people?.run{
      println("my name is $name, I am $age years old")
      // 打印:my name is carson, I am 25 years old
    }
}

3 with

with 是一个非扩展函数,可以简洁地访问其参数的成员:我们可以在引用其成员时省略实例名称。所以说,run 相当于 let 和 with 的集合。

class Configuration(var host: String, var port: Int) 
fun main() {
    val configuration = Configuration(host = "127.0.0.1", port = 9000) 
    with(configuration) {
        println("$host:$port")   // 打印 127.0.0.1:9000
    }
    // instead of:
    println("${configuration.host}:${configuration.port}")    // 打印 127.0.0.1:9000
}

4 apply

apply 对对象执行代码块并返回对象本身。在块内部,对象由此引用。此函数对于初始化对象非常方便。所以再重复一遍,apply函数返回传入的对象的本身。

data class Person(var name: String, var age: Int, var about: String) {
    constructor() : this("", 0, "")
}
fun main() {
    val jake = Person()                   
    val stringDescription = jake.apply {  
        // Applies the code block (next 3 lines) to the instance.
        name = "Jake"                                   
        age = 30
        about = "Android developer"
    }.toString()                            
    println(stringDescription)      // 打印 Person(name=Jake, age=30, about=Android developer)
}

5 also

类似 let 函数,但区别在于返回值:

  • let 函数:返回值 = 最后一行 / return的表达式
  • also 函数:返回值 = 传入的对象的本身
// let函数
var result = mVar.let {
               it.function1()
               it.function2()
               it.function3()
               999
}
// 最终结果 = 返回999给变量result
// also函数
var result = mVar.also {
               it.function1()
               it.function2()
               it.function3()
               999
}
// 最终结果 = 返回一个mVar对象给变量result

另一个类似的例子:

data class Person(var name: String, var age: Int, var about: String) {
             constructor() : this("", 0, "")
}
fun writeCreationLog(p: Person) {
    println("A new person ${p.name} was created.")              
}
fun main() {
    val jake = Person("Jake", 30, "Android developer")   // 1
        .also {                                          // 2 
            writeCreationLog(it)                         // 3
        }
    println(jake)   
    // 最终打印:
    // A new person Jake was created.
    // Person(name=Jake, age=30, about=Android developer)
}

到此这篇关于Kotlin作用域函数使用示例详细介绍的文章就介绍到这了,更多相关Kotlin作用域函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Kotlin作用域函数使用示例详细介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Kotlin作用域函数使用示例详细介绍

作用域函数:是Kotlin标准库中的内联函数,作用在对象上时,执行给定的block代码块。可以在block代码块中通过it,this代表当前对象,进行代码逻辑处理
2023-02-17

Python函数介绍:filter函数的作用和示例

Python函数介绍:filter函数的作用和示例Python是一种功能强大的编程语言,提供了许多内置的函数,其中之一就是filter函数。filter函数用于过滤列表中的元素,并返回满足指定条件的元素组成的新列表。在本文中,我们将介绍fi
Python函数介绍:filter函数的作用和示例
2023-11-04

Python函数介绍:all函数的作用和示例

Python函数介绍:all函数的作用和示例Python是一种功能强大的编程语言,拥有许多内置函数,其中一个非常实用的函数是all()。在本篇文章中,我将介绍all函数的作用,并提供详细的代码示例。all()函数是一个用于判断可迭代对象中的
Python函数介绍:all函数的作用和示例
2023-11-04

Python函数介绍:isinstance函数的作用和示例

Python函数介绍:isinstance函数的作用和示例Python作为一门高级编程语言,提供了丰富的内置函数来简化编程任务。其中之一就是isinstance函数。isinstance函数用于判断一个对象是否属于指定的类型。本文将介绍is
Python函数介绍:isinstance函数的作用和示例
2023-11-03

Python函数介绍:callable函数的作用和示例

Python函数介绍:callable函数的作用和示例Python是一种广泛使用的高级编程语言,具有丰富的内置函数。其中一个非常有用的函数是callable函数。在本篇文章中,我们将介绍callable函数的作用,并提供一些具体的示例代码来
Python函数介绍:callable函数的作用和示例
2023-11-04

Python函数介绍:pow函数的作用和示例

Python函数介绍:pow函数的作用和示例在Python编程语言中,pow函数是一个用于求幂运算的内置函数。它的主要作用是计算指定数值的指定次幂,并返回结果。pow函数具有灵活的用法,可以接受两个参数,也可以接受三个参数。下面将详细介绍p
Python函数介绍:pow函数的作用和示例
2023-11-04

Python函数介绍:len函数的功能和使用示例

Python函数介绍:len函数的功能和使用示例在Python编程中,len()是一个常用的内置函数,它用来返回传入对象的长度或元素个数。这个函数可以用于字符串、列表、元组、字典和集合等不同类型的数据结构。len()函数非常简单易用,本文将
Python函数介绍:len函数的功能和使用示例
2023-11-03

Python函数介绍:float函数的功能和使用示例

Python函数介绍:float函数的功能和使用示例Python是一种广泛应用于多个领域的高级编程语言,它提供了丰富的内置函数,以便开发者能够更加方便地开发和处理数据。其中之一就是float函数,它用于将字符串或者数字转换为浮点数类型。在本
Python函数介绍:float函数的功能和使用示例
2023-11-03

Python函数介绍:compile函数的功能和使用示例

Python函数介绍:compile函数的功能和使用示例在Python编程中,compile()函数是一个内置函数,它的作用是将字符串形式的Python代码编译为字节码或AST对象。编译之后,可以通过执行该字节码或AST对象来实现代码的运行
Python函数介绍:compile函数的功能和使用示例
2023-11-04

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录