当前位置: 首页 > news >正文

kotlin的函数标准库使用

摘要说明

函数标准库常用的有:
1、apply

apply函数作为一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以方便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者

使用介绍:

    // 使用apply实现
    val file1 = File("E://text_demo.txt").apply {
        setReadable(true)
        setWritable(true)
        setExecutable(false)
    }

2、let

能使某个变量作用于其lambda表达式里,让it关键字能引用。let和apply比较,let会把接收者传给lambda,而apply什么都不传,匿名执行完函数;apply会返回当前接收者,而let会返回lambda最后一行。

使用介绍:

    /**
     * let使用
     */

    val result = listOf<Int>(3, 2, 1).first().let {
        it * it
    }
    输出结果:9
-----------------------------------------------------------
fun formatGreeting(guestName: String?): String {
    return guestName?.let {
        "Welcome, $it"
    } ?: "what's your name?"
}

formatGreeting(null)
输出结果:what's your name?

----------------------------------------------------------
说明:安全调用允许在可空类型上调用函数
var str: String = "butterfly"

    str = str.let {
        if (it.isNotBlank()) {
            it.capitalize().plus("你好")
        } else {
            "butterfly"
        }
    }
    println(str)

输出结果:Butterfly你好

3、run

1)光看作用域行为,run和apply差不多,但与apply不同,run函数不返回接收者,run返回的是lambda结果,也就是true或者false。2)执行函数引用

使用介绍:

    /**
     * run函数的使用
     */
    // 使用方式1
    val file2 = File("E://text_demo.txt")
    val result2 = file2.run {
        readText().contains("great")
    }
     println(result2)
     输出结果:true
---------------------------------------------------------------
// 使用方式2,调用函数
    val isLong = "The people's Republic of China".run(::isLong)
    fun isLong(name: String) {
    name.length >= 10
}
    println(isLong)
    
    输出结果:true

4、with

是run的变体,他们的功能行为是一样的,但with调用方式不同,调用with时,需要值参作为其第一个参数传入

使用介绍:

    val resultWith = with("The people's Republic of China") {
        length >= 10
    }
    println(resultWith)
    输出结果:true

5、also

和let函数功能相似。和let一样also也是把接受者作为参数值传给lambda,但是有一点不同:also返回接收者对象,而let返回lambda结果,因为这个差异,also尤其适合针对同一原始对象,处理事务,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用。

使用介绍:

    /**
     * also函数使用
     */
    var fileContents: List<String>
    File("E://text_demo.txt")
        .also {
            println(it.name)
        }.also {
            fileContents = it.readLines()
        }
    println(fileContents)
----------------------------------------------------------------------------------    
    输出结果:
    text_demo.txt
    [I am happy to join with you today in what will go down in history as the greatest

6、takeIf

takeif函数需要判断lambda中提供的条件表达式,给出true或false结果,如果判断结果是true,从takeIf函数返回接收者对象,如果是false则返回null。如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takeif就非常有用,takeif函数类似于if语句,但它的优势是可以直接在对象实例上调佣避免了临时变量赋值的麻烦

使用介绍:

    // 如果条件返回false,则文件返回null
    val readText = File("E://text_demo.txt")
        .takeIf { it.exists() && it.canRead() }
        ?.readText()
    println(readText)
    
输出结果:文档内容

7、takeUnless

takeif的函数辅助类takeUnless,只有判断你给定的条件 结果是false时,takeUnless(除非)才会返回原始接收者对象

使用介绍:

// 核心:takeUnless 是反向操作
    val readText = File("E://text_demo.txt")
        .takeUnless { it.isHidden }
        ?.readText()
    println(readText)

   输出结果:文档内容

相关文章:

  • python-leetcode-不同路径
  • 基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
  • 【一起学Rust | Tauri2.0框架】单实例应用程序的深入解析:零漏洞实现与优化实战
  • SpringBoot 整合mongoDB并自定义连接池,实现多数据源配置
  • 【软考】【2025年系统分析师拿证之路】【啃书】第十四章 软件实现与测试(十五)
  • 进阶面试题 ——‘说说你对浏览器的V8引擎的理解’
  • python开发之 __init__.py的一些基本用法
  • C高级(shell)
  • C高级----shell作业
  • 山东大学软件学院nosql实验二
  • pta天梯L1-004 计算摄氏温度
  • 基于 Spring AI 的 HIS 系统智能化改造
  • (七)消息队列-Kafka 序列化avro(传递)
  • 深入理解 Kubernetes 命名空间:高效管理与隔离资源的关键
  • React Native 原理
  • TDengine 中的数据库
  • C++-第十三章:红黑树
  • webpack5在生产环境屏蔽掉控制台打印 失效处理
  • Nginx 配置前端后端服务
  • 矩阵 trick 系列 题解
  • 刘强东坐镇京东一线:管理层培训1800人次,最注重用户体验
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆
  • 国内首家破产的5A景区游客爆满,洛阳龙潭大峡谷:破产并非因景观不好
  • 新能源汽车,告别混乱创新
  • 孙简任吉林省副省长
  • 复旦大学与上海杨浦共建市东医院