• Kotlin语言内置函数学习2:with,also,takeIf,takeUnless


    内置函数2总结:

    with:

    with(str):with和run基本一样,只不过就是使用的时候不同

    1.with函数返回类型,是根据匿名函数最后一行的变化而变化

    2.with函数的匿名函数里面持有的是this==str本身


    also:
    str.also
    1.also函数返回类型,用于都是str本身
    2.also函数的 匿名函数里面呢持有的是it == str本身
     

    takeIf:
    name.takeIf
    //一般大部分情况下,都是takeIf + 空合并操作符一起使用
    //作用:如果结果为true,返回调用者name本身,否则返回null,结合空合并,如果为null,处理?:后的
     

    takeUnless:

    takeIf和takeUnless功能是相反的
    name.takeIf {true/false}  :true返回name本身,false返回null
    name.takeUnless {true/false}:false返回name本身,true返回null

    一、Kotlin语言的with函数

    1. fun main() {
    2. val str = "nihao"
    3. //匿名操作
    4. with(with(str) {
    5. //this == str 本身
    6. length
    7. }){
    8. println("你的字符串长度为:$this")
    9. }
    10. //具名操作
    11. with(with(str,::getStrLen),::println) //输出nihao的长度
    12. }
    13. fun getStrLen(str: String) = str.length

    二、Kotlin语言的also内置函数

    1. fun main() {
    2. val str = "ABCDEFG"
    3. val r1 : String = str.also {
    4. true
    5. 'C'
    6. }
    7. val r2 : Int = 123.also {
    8. true
    9. 'C'
    10. }
    11. str.also {
    12. //it == str 本身
    13. println(it)
    14. }
    15. //真正使用also函数的写法规则如下:
    16. //str.also特点,also函数始终是返回“str本身”,所以可以链式调用
    17. str.also {
    18. println("str的原始数据是:$it")
    19. }.also {
    20. println("str转换大写的效果是:${it.toLowerCase()}")
    21. }
    22. }

    三、Kotlin语言的takeIf内置函数

    1. //一般大部分情况下,都是takeIf + 空合并操作符一起使用
    2. //作用:如果结果为true,返回调用者name本身,否则返回null,结合空合并,如果为null,处理?:后的
    3. fun main() {
    4. val result = checkPermissionAction("Derry","123")
    5. println(if (result != null) "欢迎${result}" else "没有权限")
    6. //println(checkPermissionAction2("Root","1"))
    7. }
    8. //前端
    9. public fun checkPermissionAction(name: String,pwd: String) : String? {
    10. return name.takeIf { permissionSystem(name,pwd) }
    11. //name.takeIf函数,如果函数里是true,则返回name,否则,则返回null
    12. }
    13. //takeIf + 空合并操作符
    14. public fun checkPermissionAction2(name: String,pwd: String) : String {
    15. return name.takeIf { permissionSystem(name,pwd) } ?: "你的权限不够"
    16. //name.takeIf函数,如果函数里是true,则返回name,否则,则返回null
    17. }
    18. //权限系统
    19. private fun permissionSystem(username: String,userpwd: String) : Boolean {
    20. return if (uername == "root" && userpwd == "123") true else false
    21. }

    四、Kotlin语言的takeUnless内置函数

    1. //takeUnless函数,true,返回null,false,返回调用者
    2. class Manager {
    3. private var infoValue: String? = null
    4. fun getInfoValue()
    5. fun setInfoValue(infoValue: String) {
    6. this.infoValue = infoValue
    7. }
    8. }
    9. fun main() {
    10. val manager = Manager()
    11. "Derry".takeIf //it == Derry
    12. "Derry".takeUnless // it == Derry
    13. //验证字符是否有初始化,这里为空则是true,takeUnless为true,则返回null,为null,则之后?:后的
    14. //isNullOrBlank()判断是否为空
    15. println( manager.getInfoValue().takeUnless { it.isNullOrBlank() } ?: "未经过初始化")
    16. }
  • 相关阅读:
    rsync远程同步
    18【命令设计模式】
    MQ~消息队列能力、AMQP协议、现有选择(Kafka、RabbitMQ、RocketMQ 、Pulsar)
    国际结算习题集及答案
    SSM基于WEB的房屋出租管理系统 毕业设计-附源码261620
    Redis TTL 命令:掌握数据生存时间,加速开发者的缓存技巧
    linux下python连接oracle数据库
    CVE-2020-1957 Apache Shiro 认证绕过漏洞
    十六、模型构建器(ModelBuilder)快速提取城市建成区——理论介绍
    【JavaEE】JavaScript(WebAPI)
  • 原文地址:https://blog.csdn.net/XXX_17/article/details/127683031