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

kotlin 比较 let apply

`let` 和 `apply` 是 Kotlin 标准库中的两个非常有用的函数,它们用于在代码中实现更简洁和可读的操作。它们通常在函数式编程和链式调用中使用,以简化代码并提高可维护性。下面是关于这两个函数的详细解释:

let

`let` 函数是一个作用域函数,它接收一个对象作为参数,并在作用域内对该对象进行操作。它的主要用途是在对象不为 `null` 的情况下执行操作。`let` 函数的语法如下:

object?.let { /* 在这里操作对象 */ }

或者可以带有参数的形式:

object?.let { parameter -> /* 在这里操作对象,可以使用参数 */ }

示例

val name: String? = "John"
name?.let { // 在这里操作 name,不为 null 时执行println("Name is $it")
}

apply

`apply` 函数也是一个作用域函数,它类似于 `let`,但主要用于对对象的初始化和属性设置。与 `let` 不同,`apply` 函数在作用域内直接访问对象的属性,而不需要额外的参数。它的语法如下:

object.apply { /* 在这里设置属性和初始化 */ }

示例

val person = Person()
person.apply {name = "Alice"age = 30// 在这里设置属性和初始化,可以直接访问对象的属性
}

比较 let 和 apply

虽然 `let` 和 `apply` 都是作用域函数,但它们的主要区别在于使用场景:

  • `let` 通常用于在对象不为 `null` 的情况下执行一系列操作,它可以用于链式调用,同时还可以将对象的值传递给 lambda 表达式的参数。
  • `apply` 主要用于在对象的创建和初始化过程中设置属性,它强调在作用域内对对象进行多次操作,无需重复引用对象名称。

这两个函数在编写更简洁的代码,特别是在处理可空对象或对象初始化方面非常有用。根据具体的场景选择合适的函数可以使代码更加清晰易读。

相关文章:

kotlin 比较 let apply

let 和 apply 是 Kotlin 标准库中的两个非常有用的函数,它们用于在代码中实现更简洁和可读的操作。它们通常在函数式编程和链式调用中使用,以简化代码并提高可维护性。下面是关于这两个函数的详细解释: let let 函数是一个作用域函数&#…...

springboot跨域踩坑笔记

事情是这样的,我在进行前后端联调的时候,发送了跨域拦截 马上在spring项目中创建一个CorsConfig类 package com.example.demo.config;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.an…...

基于STM32+FreeRTOS的四轴机械臂

目录 代码: 注释写的较少,但本文出现的代码都有注释,所以请直接在本文里看注释 项目概述: 一 准备阶段(都是些废话) 二 裸机测试功能 1.摇杆控制 接线: CubeMX配置: 代码 2…...

【C语言】三子棋游戏——超细教学

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 🔥该篇将结合之前的知识来实现 三子棋游戏。 目录: 🌟思路框架:测试游戏 &#x1f31f…...

redux的介绍、安装、三大核心与执行流程

redux的介绍、安装、三大核心与执行流程 一、redux的基本介绍二、redux的安装三、redux核心概念3.1 action3.2 reducer3.3 store 四、Redux代码执行流程五、加减案例练习 一、redux的基本介绍 redux中文官网Redux 是 React 中最常用的状态管理工具(状态容器&#x…...

Redis 5环境搭建

一、环境搭建 如果是Centos8,yum 仓库中默认的 Redis版本就是5,直接yum install即可。如果是Centos7,yum 仓库中默认的 Redis版本是3系列,比较老~ 为了我们能在 Centos7中下载到 Redis5 首先要安装额外的软件源 sudo yum insta…...

stm32红绿灯源代码示例(附带Proteus电路图)

本代码不能直接用于红路灯,只是提供一个思路 #include "main.h" #include "gpio.h" void SystemClock_Config(void); void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOB_CLK_ENAB…...

Qt与电脑管家4

折线图&#xff1a; #ifndef LINE_CHART_H #define LINE_CHART_H#include <QWidget> #include <QPainter> #include "circle.h" class line_chart : public QWidget {Q_OBJECT public:explicit line_chart(QWidget *parent nullptr); protected:void pa…...

使用css美化gradio界面

基本方法 在默认的前端页面中使用检查工具确定要修改的部分的选择器名称&#xff0c;然后在block_css中对其修改&#xff0c;并在启动网页时传入参数&#xff1a;with gr.Blocks(cssblock_css, thememy_theme) as demo: 禁止修改下拉框文字 input.border-none.svelte-c0u3f0…...

Flink流批一体计算(13):PyFlink Tabel API之SQL DDL

1. TableEnvironment 创建 TableEnvironment from pyflink.table import Environmentsettings, TableEnvironment# create a streaming TableEnvironmentenv_settings Environmentsettings.in_streaming_mode()table_env TableEnvironment.create(env_settings)# or create…...

java笔试手写算法面试题大全含答案

1.统计一篇英文文章单词个数。 public class WordCounting { public static void main(String[] args) { try(FileReader fr new FileReader("a.txt")) { int counter 0; boolean state false; int currentChar; while((currentChar fr.read()) ! -1) { i…...

点云平面拟合和球面拟合

一、介绍 In this tutorial we learn how to use a RandomSampleConsensus with a plane model to obtain the cloud fitting to this model. 二、代码 #include <iostream> #include <thread> #include <pcl/point_types.h> #include <pcl/common/io.…...

部署问题集合(十九)linux设置Tomcat、Docker,以及使用脚本开机自启(亲测)

前言 因为不想每次启动虚拟机都要手动启动一遍这些东西&#xff0c;所以想要设置成开机自启的状态 设置Tomcat开机自启 创建service文件 vi /etc/systemd/system/tomcat.service添加如下内容&#xff0c;注意修改启动脚本和关闭脚本的地址 [Unit] DescriptionTomcat9068 A…...

视觉SLAM:一直在入门,如何能精通,CV领域的绝境长城,

目录 前言 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 1 什么是SLAM&#xff1f; 2 为什么用SLAM&#xff1f; 3 视觉SLAM怎么实现&#xff1f; 4 前端视觉里程计 5 后端优化 6 回环检测 7 地图构建 8 结语 前言 上周的组会上&…...

【报错】yarn --version Unrecognized option: --version Error...

文章目录 问题分析解决问题 在使用 npm install -g yarn 全局安装 yarn 后,查看yarn 的版本号,报错如下 PS D:\global-data-display> yarn --version Unrecognized option: --version Error: Could...

二叉搜索树的(查找、插入、删除)

一、二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1、若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b; 2、若它的右子树不为空&#xff0c;则右子树上所有节点的值都…...

电力虚拟仿真 | 高压电气试验VR教学系统

在科技进步的推动下&#xff0c;我们的教育方式也在发生着翻天覆地的变化。其中&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的出现&#xff0c;为我们提供了一种全新的、富有沉浸感的学习和培训方式。特别是在电力行业领域&#xff0c;例如&#xff0c;电力系统的维护…...

innovus如何设置size only

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 给instance设置size only属性命令如下: dbset [dbGet top.inst.name aa/bb -p] .dontTouch sizeOk 给一个module设置size only需要foreach循环一下: foreach inst [dbGet top.…...

Java之继承详解二

3.7 方法重写 3.7.1 概念 方法重写 &#xff1a;子类中出现与父类一模一样的方法时&#xff08;返回值类型&#xff0c;方法名和参数列表都相同&#xff09;&#xff0c;会出现覆盖效果&#xff0c;也称为重写或者复写。声明不变&#xff0c;重新实现。 3.7.2 使用场景与案例…...

国内常见的几款可视化Web组态软件

组态软件是一种用于控制和监控各种设备的软件&#xff0c;也是指在自动控制系统监控层一级的软件平台和开发环境。这类软件实际上也是一种通过灵活的组态方式&#xff0c;为用户提供快速构建工业自动控制系统监控功能的、通用层次的软件工具。通常用于工业控制&#xff0c;自动…...

闯入漳州粉色几何秘境,复刻西班牙红墙浪漫

在福建漳州市漳浦县的火山岛自然生态风景区内&#xff0c;有一座以粉红色为主色调、线条利落的几何形建筑群。因其层层叠叠的阶梯、错落的平台与迷宫般的路径结构&#xff0c;与西班牙卡尔佩的“红墙”&#xff08;La Muralla Roja&#xff09;景观高度相似&#xff0c;被游客称…...

别再死记SGD公式了!用PyTorch手把手带你复现一个‘会滚下山’的优化器(附完整代码)

从零构建PyTorch SGD优化器&#xff1a;可视化梯度下降的物理直觉 想象你站在一座云雾缭绕的山顶&#xff0c;手中握着一颗钢珠。当你松开手指&#xff0c;钢珠会沿着最陡峭的路径滚向谷底——这正是梯度下降算法的核心隐喻。本文将带你用PyTorch重建这个直观过程&#xff0c;不…...

基于MCP协议的学术成果商业化AI管道:从论文到商业机会的自动化桥梁

1. 项目概述&#xff1a;从象牙塔到市场的自动化桥梁看到apifyforge/academic-commercialization-pipeline-mcp这个项目标题&#xff0c;我的第一反应是&#xff1a;终于有人把学术界和产业界之间那道无形的墙&#xff0c;用代码给砌出了一条自动化通道。这个项目本质上是一个“…...

别再复制粘贴了!手把手教你从零配置一个生产可用的log4j2.xml文件

从零构建生产级Log4j2配置&#xff1a;告别复制粘贴的五个关键设计 每次接手新项目时&#xff0c;看到团队直接从GitHub或博客复制过来的log4j2.xml文件&#xff0c;我都会暗自叹气。这些配置往往带着各种隐患&#xff1a;有的在高峰期突然打满磁盘&#xff0c;有的关键错误日志…...

openOii:开源工业信息集成框架架构解析与实战指南

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为openOii的项目引起了我的注意。这个由开发者 Xeron2000 发起的项目&#xff0c;从名字上就透着一股“开放”和“工业”的气息。作为一个在工业自动化和数据集成领域摸爬滚打了十多年的老兵&#xff0c;我深知在制造业…...

Kinovea运动视频分析:免费开源的专业动作量化工具终极指南

Kinovea运动视频分析&#xff1a;免费开源的专业动作量化工具终极指南 【免费下载链接】Kinovea Video solution for sport analysis. Capture, inspect, compare, annotate and measure technical performances. 项目地址: https://gitcode.com/gh_mirrors/ki/Kinovea …...

从夏普IGZO技术授权看显示面板产业的技术转移与战略博弈

1. 从一则旧闻看显示产业的全球棋局&#xff1a;技术、资本与生存的博弈2013年夏天&#xff0c;一则来自日本的消息在科技产业圈&#xff0c;特别是显示面板和半导体供应链领域&#xff0c;激起了不小的涟漪。全球知名的消费电子品牌夏普公司&#xff0c;宣布了一项与中国国有企…...

基于Gemini与Elasticsearch构建智能数据查询命令行工具

1. 项目概述&#xff1a;当Elasticsearch遇见Gemini&#xff0c;一个命令行智能体的诞生 最近在开源社区里闲逛&#xff0c;发现了一个挺有意思的项目&#xff1a; elastic/gemini-cli-elasticsearch 。光看这个名字&#xff0c;就能嗅到一股“强强联合”的味道。Elasticsea…...

为什么数据科学家都爱用Spyder?这6个独特优势让你告别Python开发烦恼! [特殊字符]

为什么数据科学家都爱用Spyder&#xff1f;这6个独特优势让你告别Python开发烦恼&#xff01; &#x1f60a; 【免费下载链接】spyder Official repository for Spyder - The Scientific Python Development Environment 项目地址: https://gitcode.com/gh_mirrors/sp/spyder…...

从OpenClaw到memU Bot:企业级AI代理的记忆优先架构与实战部署

1. 项目概述&#xff1a;从个人助手到企业级AI代理的跃迁如果你和我一样&#xff0c;是OpenClaw的早期用户&#xff0c;那你一定体验过那种“私人AI管家”带来的便利。它能帮你写邮件、查资料、整理文件&#xff0c;就像一个随时待命的数字伙伴。但当我们尝试在团队内部推广&am…...