使用作用域函数简化您的 Kotlin 代码:释放对象的力量

news2024/12/29 17:59:55

使用作用域函数简化您的 Kotlin 代码:释放对象的力量

欢迎,亲爱的 Kotlin 爱好者!厌倦了在处理对象时反复书写相同的代码吗?别担心!Kotlin 的作用域函数来拯救你,为你的编码之旅增添优雅的色彩。在这篇有趣的博文中,我们将一同穿越时空,探寻在作用域函数出现之前,开发者是如何克服困难的。但毋需担心,我们很快就将进入到作用域函数的神奇世界,并通过引人入胜的示例亲眼见证它们的威力。

那么,什么是作用域函数呢?

在 Kotlin 的标准库中,有几个函数专门用于在对象的上下文中执行一组代码。当你在一个对象上调用这些函数并提供一个 lambda 表达式时,它们会形成一个临时的作用域。在这个作用域内,你可以直接访问该对象,而无需使用对象的名称。这些函数被称为作用域函数。

在引入作用域函数之前

对象重复的困扰 在 Kotlin 编码的古老时期,开发人员面临着冗长而重复的代码困扰。想象一下:你不得不一遍又一遍地引用同一个对象,希望通过对它进行操作来实现自己的目标。遗憾的是,代码变得混乱不堪,即使是最有经验的专家也难以保持头脑清醒。让我们通过一个例子来说明这个问题:

fun processUser(user: User) {
    // Repeatedly performing operations on the user object
    user.name = "John"
    user.age = 30
    user.email = "john@example.com"
    
    // Calling functions using the user object, yet repetition persists
    validateUser(user)
    updateUserDatabase(user)
    sendWelcomeEmail(user)
}

噢,太可怕了!重复和杂乱让最勇敢的开发者都感到沮丧。

##介绍作用域函数
就在所有希望似乎都已经消失时,Kotlin带来了神奇的作用域函数,为我们的代码注入魔力,消除了枯燥乏味。这五个神奇的咒语,它们就是let、run、with、applyalso,它们能够简化我们对对象的操作。现在,让我们踏上揭开它们秘密、感受它们威力的旅程吧!

### let:链接的巫术
使用let这个咒语可以让我们在对象上进行连续操作,摆脱了重复引用和空值检查的困扰。只需一挥魔杖,我们就可以将代码进行转变:

user?.let { safeUser ->
    // Magical transformations and validations ensue
    safeUser.name = "John"
    safeUser.age = 30
    safeUser.email = "john@example.com"
    
    validateUser(safeUser)
    updateUserDatabase(safeUser)
    sendWelcomeEmail(safeUser)
}

run:神秘仪式

看这里,我们拥有一种神秘的run仪式,可以在一个物体上施放咒语,并返回我们上一个表达式的结果。它非常适用于对象的初始化和非空对象的处理。

val updatedUser = user.run {
    // Mystical transformations and validations commence
    name = "John"
    age = 30
    email = "john@example.com"
    
    validateUser(this)
    updateUserDatabase(this)
    sendWelcomeEmail(this)
    
    this // Return the updated user object
}

with魔术师的快乐

在使用with咒语时,我们可以在没有明确引用的情况下对一个物体进行重要操作。这对于处理属性或调用函数非常有用。

with(user) {
    // Grand transformations and validations unfold
    name = "John"
    age = 30
    email = "john@example.com"
    
    validateUser(this)
    updateUserDatabase(this)
    sendWelcomeEmail(this)
}

apply变形咒

准备好惊叹于apply咒的魔力,它能让我们配置对象的属性并返回修改后的对象本身。不需要使用返回语句。

user.apply {
    // Magical configurations and validations commence
    name = "John"
    age = 30
    email = "john@example.com"
}.run {
    validateUser(this)
    updateUserDatabase(this)
    sendWelcomeEmail(this)
}

also附魔师的助手

最后,我们遇到了另外一个值得信赖的助手 - also 这个咒语,它允许我们在返回对象本身的同时对对象执行附加操作。它非常适用于产生副作用和记录日志:

user.also {
    // Performing additional operations and incantations
    println("Updating user: $it")
    validateUser(it)
    updateUserDatabase(it)
    sendWelcomeEmail(it)
}

结论

释放作用域函数的魔力,Kotlin巫师们啊,作用域函数是打开更清晰、更具表达力的代码之门的魔法钥匙。它们使我们摆脱了重复的对象引用的困扰,并通过优雅的语法为我们的代码注入了生机。拥抱let、run、with、applyalso 的魔力,简化你的 Kotlin 咒语。愿你的代码闪耀着清晰,你的咒语轻松施展。前进吧,伙伴们,创造迷人的 Kotlin 应用程序!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为认证 | 7月底这门HCIA认证即将发布!

华为认证HCIA-Cloud Service V3.5(中文版)预计将于2023年7月31日正式对外发布。 为了帮助您做好学习、培训和考试计划,现进行预发布通知,请您关注。 01 发布概述 基于“平台生态”战略,围绕“云-管-端”协同的新ICT技…

小程序学习(三):小程序的宿主环境

1.什么是宿主环境 宿主环境指的是程序运行所必须的依赖环境。例如:Android系统和IOS系统是两个不同的宿主环境。安卓版的微信App是不能在IOS环境下运行的,所以Android是暗转软件的宿主环境,脱离宿主环境的软件是没有任何意义的! 2.小程序的宿主环境 小程序借助宿主环境提供的能…

(4)【轨迹优化篇】线性加权轨迹代价损失评分,轨迹多选一方法--DWA_planner、Open_Planner、lexicographic_planner

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言1、设计代价损失函数进行评分、线性加权法、迹评分轨迹多选一的轨迹优化设计思想(1)设计代价函数进行…

适用于企业级工作负载的混合闪存存储

NetApp FAS9500、FAS8700、FAS8300:适用于企业级工作负载的 FAS 拥有企业级应用程序和私有云的客户通常部署这些系统来作为架构基础。通过与主要超大规模云提供商的简单集成创建统一的混合云 借助 NetApp FAS 按需扩展性能 客户将这些平台描述为“重型”&#xff0…

2023年开源社执行委员会介绍

总起 开源社的各项工作主要分为内部事务、对外事务与专项工作三大类。整体而言,基础设施、财务、法律与成员发展等工作较为偏向于内部事务,而活动、媒体、社区合作、顾问委员会服务、国际接轨等工作偏向于对外联络与展现,而教育、公益、硬件、…

基于Tensorflow来重现GPT v1模型

OpenAI推出的ChatGPT模型让我们看到了通用人工智能的发展潜力,我也找了GPT的相关论文来进行研究。OpenAI在2017年的论文Improving Language Understanding by Generative Pre-Training提出了GPT的第一个版本,我也基于这个论文来用Tensorflow进行了复现。…

红外雨量计(光学雨量传感器)在监测降雨量的应用

红外雨量计(光学雨量传感器)在监测降雨量的应用 红外雨量计是一种基于红外光学原理的降雨量监测设备。它利用红外传感器检测雨滴落在传感器上时所产生的反射光信号,根据信号的强弱和持续时间计算出降雨强度和累计降雨量。 红外雨量计在监测降…

FITC Biotin(134759-22-1),5-FAM azide(510758-23-3),荧光素标记试剂的特点

Part1-----FITC-Biotin,134759-22-1 基础产品数据(Basic Product Data): CAS号:134759-22-1 中文名:异硫氰酸荧光素标记生物素 英文名:FITC-Biotin,Fluorescein Biotin,…

vue element select下拉框树形多选

components 文件下新建 SelectTree文件 index.vue SelectTree index.vue <!--* 下拉树形选择 组件--> <template><el-select ref"select" style"min-width: 260px" :value"value" v-model"valueName" collapse-tags :…

Python应用实例(一)外星人入侵(七)

外星人入侵&#xff08;七&#xff09; 1.射杀外星人1.1 检测子弹与外星人的碰撞1.2 为测试创建大子弹1.3 生成新的外星人群1.4 提高子弹的速度1.5 重构_update_bullets() 2.结束游戏2.1 检测外星人和飞船碰撞2.2 响应外星人和飞船碰撞2.3 有外星人到达屏幕底端2.4 游戏结束 3.…

毫米波雷达(三):实操

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、福相一致性校准二、速度解模糊其他 一、福相一致性校准 多波束天线通道幅相一致性校正及实现 https://www.docin.com/p-2640129630.html 二、速度解模糊 一种…

SpringBoot的@ConfigurationProperties、@Autowired、@Conditional注解

目录 1. ConfigurationProperties EnableConfigurationProperties Autowired注解1.1 configuration自定义配置参数自动补全功能 2. Conditional注解 1. ConfigurationProperties EnableConfigurationProperties Autowired注解 在resources/application.properties文件中&a…

map、foreach 和 for ,多角度对比

for 1.访问元素和操作方式------通过索引访问数组元素&#xff0c;并可以执行任意操作。 const numbers [1, 2, 3, 4, 5];// for循环示例 for (let i 0; i < numbers.length; i) {console.log("Number (for loop): " numbers[i]); } 2.索引控制--------通过…

非线性系统的混沌特性分析方法--相图/分岔图分析法

非线性系统的混沌特性分析方法–相图/分岔图分析法 ​ 混沌映射被用于生成混沌序列&#xff0c;这是一种由简单的确定性系统产生的随机性序列。一般混沌序列具有以下主要特征&#xff1a; 非线性&#xff1b;对初值的敏感依赖性&#xff1b;遍历性&#xff1b;随机性&#xf…

【Linux初阶】基础IO - 磁盘 文件系统

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;认识磁盘&#xff08;物理结构、储存结构、逻辑结构、读取单位&#xff09;&#xff0c;理解文件系统&#xf…

会声会影2023最新免费版零基础上手视频剪辑工具

比如会声会影视频编辑软件&#xff0c;既加入光影、动态特效的滤镜效果&#xff0c;也提供了与色彩调整相关的LUT配置文件滤镜&#xff0c;可选择性大&#xff0c;运用起来更显灵活。会声会影在用户的陪伴下走过20余载&#xff0c;经过上百个版本的优化迭代&#xff0c;已将操作…

【消息队列RabbitMQ】一、RabbitMQ认识

这里写目录标题 RabbitMQSpringboot整合RabbitMQRabbitMQ的常见开发模式如何保证消息的可靠生产和可靠投递什么是死值队列和延迟队列 RabbitMQ 消息队列有&#xff1a; 1、ActiveMQ 2、RabbitMQ 3、ZeroMQ 4、Kafka 什么是RabbitMQ&#xff1f; RabbitMQ是一个开源的消息队列服…

第23章:范式

一、范式 1.什么是范式 关于数据表设计的基本原则&#xff0c;规则就是范式NF。 2.范式都包括哪些&#xff1f; 第一范式&#xff08;1NF&#xff09;、第二范式&#xff08;2NF&#xff09;、第三范式&#xff08;3NF&#xff09;、巴斯-科德范式&#xff08;BCNF - Boyce…

两台电脑如何共享文件?6步快速完成!

电脑之间共享文件已经成为日常工作中不可或缺的一部分。无论是在家庭环境中与家人共享照片和视频&#xff0c;还是在办公室中与同事共享文档和数据&#xff0c;了解两台电脑如何共享文件是非常重要的。 但在实际操作中&#xff0c;如何更好的使两台电脑共享文件&#xff0c;也…

多层感知机(MLP)算法原理和代码实现

文章目录 多层感知机入门算法优化原理sklearn代码实现核心优缺点分析 多层感知机入门 神经网络在最近几年&#xff0c;是个很火的名词了。常听到的卷积神经网络(CNN)或者循环神经网络(RNN&#xff09;&#xff0c;都可以看做是神经网络在特定场景下的具体应用方式。 本文我们…