Kotlin 函数与 Lambda 表达式

今天继续分享Kotlin学习内容。
目标:掌握函数定义、调用、参数传递,以及 Lambda 表达式的基础用法

1. 函数:Kotlin 的代码模块化工具

定义:函数是可重复调用的代码块,用于封装逻辑。
语法:

fun 函数名(参数列表): 返回类型 {// 函数体return 结果  // 可省略(若表达式函数或返回类型可推断)
}

示例 1:基础函数

fun greet(name: String): String {return "Hello, $name!"
}fun main() {println(greet("Alice"))  // 输出: Hello, Alice!
}

示例 2:无返回值函数(Unit 类型可省略)

fun printMessage(message: String) {println("Message: $message")
}fun main() {printMessage("Kotlin is fun!")  // 输出: Message: Kotlin is fun!
}

示例 3:默认参数与命名参数

fun calculateArea(width: Double, height: Double = 10.0): Double {return width * height
}fun main() {println(calculateArea(5.0))          // 使用默认 height: 输出 50.0println(calculateArea(5.0, 20.0))   // 覆盖默认值: 输出 100.0
}

2. Lambda 表达式:轻量级匿名函数

定义:Lambda 是没有名称的函数,通常用于简化代码。
语法:

{ 参数列表 -> 函数体 }

示例 1:Lambda 基础

fun main() {val greetLambda: (String) -> String = { name -> "Hi, $name!" }println(greetLambda("Bob"))  // 输出: Hi, Bob!
}

示例 2:Lambda 作为函数参数

fun processString(input: String, transform: (String) -> String): String {return transform(input)
}fun main() {val result = processString("kotlin") { it.uppercase() }  // 参数名用 it 隐式表示println(result)  // 输出: KOTLIN
}

示例 3:高阶函数与 Lambda 结合

fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {return operation(a, b)
}fun main() {val sum = operateOnNumbers(3, 5) { x, y -> x + y }    // 加法val product = operateOnNumbers(3, 5) { x, y -> x * y } // 乘法println("Sum: $sum, Product: $product")  // 输出: Sum: 8, Product: 15
}

3. 函数 vs Lambda:何时使用?

函数:
需要复用逻辑时。
逻辑复杂,需多行代码时。
Lambda:
逻辑简单,仅需一次使用时。
作为参数传递给高阶函数时(如 map, filter)。

4. 今日练习建议

最后来练习一下吧
任务 1:定义一个函数 calculateDiscount(price: Double, discount: Double): Double,返回折扣后的价格。
任务 2:用 Lambda 表达式重写 calculateDiscount,并调用它。
任务 3:编写一个高阶函数 applyOperation,接受两个数字和一个 Lambda 操作(如加法、减法),返回结果。

// 示例调用
val result = applyOperation(10, 5) { a, b -> a - b }  // 输出 5

挑战题:用 Lambda 和 map 函数将一个字符串列表转为大写形式:

val names = listOf("alice", "bob", "charlie")
// 输出: [ALICE, BOB, CHARLIE]

5. 常见错误提示

错误 1:Lambda 参数类型推断失败时,需显式声明类型:

val lambda: (Int, Int) -> Int = { a, b -> a + b }  // 显式声明类型

错误 2:忘记 Lambda 的最后一个表达式是返回值(无 return 关键字)。
错误 3:混淆函数和 Lambda 的调用方式(函数直接写名称,Lambda 需赋值或传递)。

Lambda 是 Kotlin 的“瑞士军刀”,尤其在集合操作(如 filter, map)中非常强大。
默认参数和命名参数能让函数更灵活,减少重载函数的编写。

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

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

相关文章

[mcp-servers] docs | AI客户端-MCP服务器-AI 架构

链接:https://github.com/punkpeye/awesome-mcp-servers 服务器调用 相关专栏:实现Json-Rpc docs:精选MCP服务器资源列表 本专栏为精选 模型上下文协议(MCP)服务器的列表。 MCP 是一种标准协议语言,允许*…

1688商品发布API:自动化上架与信息同步

一、1688商品发布API的核心功能与技术架构 1.1 API功能全景 1688商品发布API是1688开放平台的核心组件之一,支持商品信息的自动化发布、编辑、上下架及库存同步。其核心功能包括: 商品信息管理:支持商品标题、描述、价格、库存、SKU&#…

如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境

0 软硬件环境 x86_64服务器Ubuntu20.04 LTS参考:Cuttlefish 虚拟 Android 设备参考: 笔记:搭建 Cuttlefish 运行环境可以下载编好的android-cuttlefish:android-cuttlefish.tar.gz 1 系统采用Ubuntu20.04 LTS 2 搭建cuttlefish…

机器学习9——决策树

决策树 Intro 归纳学习(Inductive Learning)的目标:从训练数据中学习一般规则,应用于未见过的数据。 决策树是一个树形结构,其中: 每个分支节点表示一个属性上的选择(即决策条件)。…

CppCon 2017 学习:The Asynchronous C++ Parallel Programming Model

清晰理解 Amdahl’s Law(阿姆达尔定律),这是一条描述并行计算加速能力的核心定律。 定义公式: S 1 ( 1 − P ) P N S \frac{1}{(1 - P) \frac{P}{N}} S(1−P)NP​1​ S S S:加速比(Speedup&#xff09…

60页PPT实战方案 | 大数据决策分析平台建设全流程路径图

目录 一、什么是大数据决策分析平台? 二、为什么要做大数据决策分析平台建设? 1. 数据已经成为“资源”,但多数组织还停留在“信息孤岛” 2. 管理复杂度上升,传统报表跟不上业务节奏 3. 外部环境不确定性高,倒逼企…

芯谷科技--降压型DC-DC转换器D4005

在现代电子设备中,电源管理芯片的性能直接关系到设备的稳定性和效率。D4005以其高效、稳定的性能和广泛的应用范围,成为众多工程师在设计电源方案时的优选。 产品简介 D4005 是一款高效降压型 DC-DC 转换器,具备固定 400KHz 开关频率&#…

【51单片机节日彩灯控制器设计】2022-6-11

缘由单片机节日彩灯控制器设计-编程语言-CSDN问答 #include "reg52.h" sbit k0P1^2; sbit k1P1^3; sbit k2P1^4; sbit k3P1^5; bit k0,kk0; void main() {unsigned char Xd0;unsigned int ys0; while(1){if(k00&&Xd0){kk0;kP31;while(k00);}if(k10&&…

PyEcharts教程(010):天猫订单数据可视化项目

文章目录 1、读取数据2、数据处理3、重复值查看4、缺失值查看5、PyEcharts可视化5.1 各个省份的订单量5.2 时间序列分析5.3 每天订单量统计可视化6、数据下载1、读取数据 1️⃣读取数据: import pandas as pd from pyecharts import options as opts from pyecharts.charts …

Redis 持久化之 AOF 策略

1. 什么是 AOF AOF 是 append only file,AOF 文件中记录了每次的操作指令,在启动 Redis 时,会将 AOF 文件中的数据读取出来以恢复数据。 2. 开启 AOF Redis 默认关闭 AOF,可以通过将 Redis 配置文件中的 appendonly 设置为 ye…

实现OFD转换PDF文件的实用方法

ODF格式的文件属于国内新型的文件格式,一般应用在保密等级比较高的系统或者单位中,比如一般政务方面或者法律行业经常会用到这种类型的文件,但是有些时候我们把文件分享给别人的时候别人不一定能打开,这时候就需要把OFD文件转换成…

JSON + 存储过程:SaaS 架构下的统一接口与租户定制之道

在多租户 SaaS 系统中,不同客户往往有差异化的业务逻辑、字段要求与流程规则。传统“统一模型 配置参数”的开发模式,虽然具有可控性,但在高度动态、合作多样化的场景下,逐渐暴露出扩展困难、上线周期长、定制成本高等问题。 随…

各种常用的串口助手工具分享

记录一篇常用串口工具的文章 工具的下载链接:https://download.csdn.net/download/m0_59415345/91204823?spm1001.2014.3001.5503 各工具的使用操作说明参考嵌入式hxydj博主的文章:https://blog.csdn.net/qq_20222919/article/details/117038284

AVL树的简洁写法

文章目录 零、写在前面一、AVL 树定义1.1 性质1.2 树高的证明 二、AVL树实现(AVL树实现名次树)2.1 节点定义2.2 左/右旋转2.3 zig-zag / zag-zig 双旋2.4 重平衡函数2.5 插入2.6 删除2.7 排名查询2.8 查前驱/后继2.9 查第 k 小2.10 完整代码 三、online …

红外图像增强(dde):基于“基础层-细节层”分解的增强算法

1、引言 与可见光图像相比,红外热成像捕捉的是物体表面的温度分布,其原始数据(通常为12位或14位)包含了极宽的温度动态范围。然而,人眼能够感知的灰度范围以及显示设备能够展示的灰度级(通常为8位&#xf…

Java-day28-其他流

1. 缓冲流 昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化流等等。这些功能更为强大的流,都是在基本的流对象基础…

S712001 开放式用户通信

开放式用户通信分类 TIA PORTAL 软件内提供了以下指令: 不带连接管理的通信指令 “TCON ” :建立以太网连接“TDISCON” :断开以太网连接“TSEND” :TCP 和 ISO ON TCP 使用的发送数据“TRCV”: TCP 和 ISO ON TCP 使…

CSMatIO库的安装与C#实现.mat文件生成

一.CSMatIO介绍 CSMatIO 是一个用于读写 MATLAB .mat 文件的开源 C# 库,它提供了简单而高效的 API,使 .NET 应用程序能够与 MATLAB 进行数据交换,支持读取和写入 MATLAB 的 .mat 文件(版本 5 和 7.3),兼容…

设计一个interface (一)

好的,我来举一个具体的例子,帮助你理解 interface、element、resource 和 architecture 之间的关系。 场景:设计一个用户管理系统的接口 背景 假设我们正在设计一个用户管理系统,系统中有两个主要的模块: 用户服务模…

tomcat下载安装

目录 一.tomact简介 二.详细步骤 三.下载页面详解(选看) 一.tomact简介 Tomcat是Apache软件基金会下的一个核心项目,它是一个开源的Java Servlet和JSP容器。由Apache、Sun等公司及个人共同开发,由于Sun的参与,最新的…