4:kotlin 方法(Functions)
想要声明一个函数需要使用fun关键字
fun hello() {return println("Hello, world!")
}fun main() {hello()// Hello, world!
}
格式:
fun 方法名(参数1: 参数1类型, 参数2 : 参数2类型, ...): 返回值类型 {方法体return 返回值
}fun 方法名(参数1: 参数1类型, 参数2 : 参数2类型, ...){方法体
}
参数可以有一个或者多个,也可以没有参数。
举例
fun sum(x: Int, y: Int): Int {return x + y
}fun main() {println(sum(1, 2))// 3
}
fun printMessageWithPrefix(message: String, prefix: String) {println("[$prefix] $message")
}fun main() {printMessageWithPrefix(prefix = "Log", message = "Hello")// [Log] Hello
}
建议使用小驼峰命名法
默认参数值
fun printMessageWithPrefix(message: String, prefix: String = "Info") {println("[$prefix] $message")
}fun main() {printMessageWithPrefix("Hello", "Log") // [Log] HelloprintMessageWithPrefix("Hello") // [Info] HelloprintMessageWithPrefix(prefix = "Log", message = "Hello")// [Log] Hello
}
如果跳过某一个参数,若果有后续的参数,必须指定参数名字
单一表达式方法
fun sum(x: Int, y: Int): Int {return x + y
}
fun main() {println(sum(1, 2))// 3
}
对单表达式函数,可以进行一下简化
- 去除返回值类型
- 去除
return关键字 - 去除
{} - 用
=连接方法体
fun sum(x: Int, y: Int) = x + yfun main() {println(sum(1, 2))// 3
}
Lambda 表达式
如下方法
fun uppercaseString(str: String): String {return str.uppercase()
}
fun main() {println(uppercaseString("hello"))// HELLO
}
可写为
fun main() {println({ str: String -> str.uppercase() }("hello"))// HELLO
}
- 方法定义在
{}内 - 参数后边跟着
-> ->后边跟着方法体str是参数名字String是参数类型- 返回值为
.uppercase()方法的返回值类型
固定格式,没什么可研究的
如果是无参数的Lambda方法
fun main() {{ println("hello") }() // hello
}
Lambda表达式可以以多种方式使用
- 将lambda分配给稍后可以调用的变量
- 将lambda表达式作为参数传递给另一个函数
- 从函数返回lambda表达式
- 单独调用lambda表达式
赋值给变量
fun main() {val upperCaseString = { string: String -> string.uppercase() }println(upperCaseString("hello"))// HELLO
}
函数类型
对于使用变量接收一个Lambda函数时,可能需要对函数进行类型定义
- 参数类型写在
()内,多个类型用,分割 - 返回值类型跟在
->后边
val upperCaseString1: (String) -> String = { string -> string.uppercase() }
// ↑ ↑
// 参数类型 返回值类型
val upperCaseString2 : () -> String = { "hello" }fun main() {println(upperCaseString("hello"))// HELLO
}
作为参数使用
fun main() {val numbers = listOf(1, -2, 3, -4, 5, -6)val positives = numbers.filter { x -> x > 0 }val negatives = numbers.filter { x -> x < 0 }println(positives) // [1, 3, 5]println(negatives) // [-2, -4, -6]
}
.fileter()方法接收一个Lambda方法作为参数
- { x -> x > 0 } 获取
List中>0的元素- { x -> x < 0 } 获取
List中<0的元素
作为返回值在方法中返回
fun main() {fun toSeconds(time: String): (Int) -> Int = when (time) {
// ↑ ↑ ↑
// toSeconds的参数及类型 ↑ 要返回的lambda函数的返回值类型
// 要返回的lambda函数的参数类型 "hour" -> { value -> value * 60 * 60 }"minute" -> { value -> value * 60 }"second" -> { value -> value }else -> { value -> value }}fun main() {val timesInMinutes = listOf(2, 10, 15, 1)val min2sec = toSeconds("minute")val totalTimeInSeconds = timesInMinutes.map(min2sec).sum()println("Total time is $totalTimeInSeconds secs") // Total time is 1680 secs}
}
Trailing lambdas (后置Lambda)
.fold()方法接收一个Int和一个lambda函数,调用方法时可写做
println(listOf(1, 2, 3).fold(0, { x, item -> x + item })) // 6
使用后置lambda方式时可写做
println(listOf(1, 2, 3).fold(0) { x, item -> x + item }) // 6
把
lambda函数放在()外
相关文章:
4:kotlin 方法(Functions)
想要声明一个函数需要使用fun关键字 fun hello() {return println("Hello, world!") }fun main() {hello()// Hello, world! }格式: fun 方法名(参数1: 参数1类型, 参数2 : 参数2类型, ...): 返回值类型 {方法体return 返回值 }fun 方法名(参数1: 参数1类型, 参数2…...
Pycharm run 输出界面控制一行能够输出的元素个数
Pycharm run 输出界面控制一行能够输出的元素个数 今天遇到了一个问题,当我们在 Pycharm 中打印输出数组时,如果数组一行的元素个数过多,那么我们在打印时就会出现以下问题。 代码如下: import numpy as npx np.array([[0., 0.7…...
C++初级项目webserver项目流程介绍(2)
一、引言 C的webserver项目是自己在学完网络编程后根据网课的内容做的一个初级的网络编程项目。 这个项目的效果是可以在浏览器通过输入网络IP地址和端口,然后打开对应的文件目录 效果如下: 也可以打开文件夹后点击目录,打开到对应的文件夹…...
SIPp mac和debian用法可能略有差别
<ereg regexp"<(.*)>" search_in"hdr" header"Contact:" check_it"true" assign_to"dummy,remote_contact"/> debian没事,但mac报错 <变< >变> 就都冇问题了 https://github.…...
echarts的横向柱状图文字省略,鼠标移入显示内容 vue3
效果图 文字省略 提示 如果是在x轴上的,就在x轴上添加triggerEvent: true,如果是y轴就在y轴添加,我是在y轴上添加的 并且自定义的方法(我取名为extension) // echarts 横向省略文字 鼠标移入显示内容 export const extension…...
laravel8安装多应用多模块(笔记三)
先安装laravel8 Laravel 安装(笔记一)-CSDN博客 一、进入项目根目录安装 laravel-modules composer require nwidart/laravel-modules 二、 大于laravel5需配置provider,自动生成配置文件 php artisan vendor:publish --provider"Nwid…...
Vue组件的几种通信方式
这里写目录标题 Vue组件的几种通信(数据传递)方式非父子组件间通信(Bus事件总线)介绍实例 非父子通信-provide&inject1.作用2.场景3.语法4.注意 父子组件间的通信固定props属性名(v-model)介绍实例 不固…...
golang panic关键词执行原理与代码分析
使用的go版本为 go1.21.2 首先我们写一个简单的panic调度与捕获代码 package mainfunc main() {defer func() {recover()}()panic("panic test") }通过go build -gcflags -S main.go获取到对应的汇编代码 可以看到当我们调度panic时,Go的编译器会将这段…...
Error running Tomcat8: Address localhost:1099 is already in use 错误解决
摘要: 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in use 的错误,导致web项目无法运行。这篇 blog 介绍了解决办法。 有时候运行web项目的时候会遇到 Error running Tomcat8: Address localhost:1099 is already in …...
android studio如何给安卓虚拟机发送短信
首先,cd到指定路径 默认情况下,Android SDK通常安装在以下位置: Windows:C:\Users\YourUsername\AppData\Local\Android\Sdk\platform-toolsmacOS:/Users/YourUsername/Library/Android/sdk/platform-toolsLinux&…...
立体仓库PLC控制系统子站诊断功能块
// //获取profinet网络已组态站信息 // //MODE:0自动辨识是获取组态信息还是错误信息 //MODE:1获取IO 设备从站已组态 //MODE:2获取IO 设备 从站故障 //MODE:3获取IO 设备 从站已禁用 //MODE:4获取IO 设备 从站存在 //MODE:5获取IO 设备 从站出现问题 // //站点状态字节位含义 …...
NFT Insider115:The Sandbox开设元宇宙Diorama快闪店,YGG Web3 游戏峰会已开幕
引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…...
【Redis篇】简述Java中操作Redis的方法
文章目录 🎄简述Jedis🎄Jedis优点🍔使用Jedis连接Redis⭐进行测试🎈进行测试 Redis(Remote Dictionary Server)是一种流行的高性能内存数据库,广泛应用于各种应用程序和系统中。作为Java开发人员…...
深度解读英伟达新一轮对华特供芯片H20、L20、L2的定位
大家好,我是极智视界,欢迎关注我的公众号,获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 因为一直从事 AI 工…...
一起学docker系列之九docker运行mysql 碰到的各种坑及解决方法
目录 前言1 Docker 运行mysql命令2 坑一:无法读取/etc/mysql/conf.d目录的问题3 坑二:/tmp/ibnr0mis 文件无法创建/写入的问题4 坑三:Navicat 连接错误(1045-access denied)5 坑四:MySQL 登录失败问题结语 …...
利用Nginx与php处理方式不同绕过Nginx_host实现SQL注入
目录 首先需要搭建环境 nginxphpmysql环境: 搭建网站 FILTER_VALIDATE_EMAIL 绕过 方法1:冒号号分割host字段 方法2:冒号号分割host字段 方法3:SNI扩展绕过 首先需要搭建环境 nginxphpmysql环境: php安装包&a…...
分割list 批量插入数据指定条数数据
一、代码层面切割好list,然后插入 // package org.apache.commons.collections4; 先将list切成1000条一份 List<List<DeptDO>> p1 ListUtils.partition(deptList, 1000); for (List<DeptDO> deptDOS : p1) { // 1000条一次批量插入systemDeptMa…...
Arduino库之 LedControl 库说明文档
LedControl 库最初是为基于 8 位 AVR 处理器的 Arduino 板编写的。用于通过MAX7219芯片控制LED矩阵和7段数码管。但由于该代码不使用处理器的任何复杂的内部功能,因此具有高度可移植性,并且应该在任何支持 和 功能的 Arduino(类似)…...
Hadoop学习总结(MapReduce的数据去重)
现在假设有两个数据文件 file1.txtfile2.txt2018-3-1 a 2018-3-2 b 2018-3-3 c 2018-3-4 d 2018-3-5 a 2018-3-6 b 2018-3-7 c 2018-3-3 c2018-3-1 b 2018-3-2 a 2018-3-3 b 2018-3-4 d 2018-3-5 a 2018-3-6 c 2018-3-7 d 2018-3-3 c 上述文件 file1.txt 本身包含重复数据&…...
ctfshow sql
180 过滤%23 %23被过滤,没办法注释了,还可以用’1’1来闭合后边。 或者使用--%0c-- 1%0corder%0cby%0c3--%0c--1%0cunion%0cselect%0c1,2,database()--%0c--1%0cunion%0cselect%0c1,2,table_name%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_…...
从安防摄像头到网页直播:手把手教你用FFmpeg把RTSP流转成HLS(m3u8),解决浏览器播放难题
从安防摄像头到网页直播:FFmpeg实现RTSP转HLS全链路解决方案 当我们需要将企业园区、仓库或门店的安防监控画面集成到内部管理系统时,总会遇到一个技术瓶颈——现代浏览器无法直接播放摄像头输出的RTSP流。本文将彻底解决这个痛点,通过FFmpeg…...
怎样高效压缩视频图片:3步掌握CompressO跨平台压缩神器
怎样高效压缩视频图片:3步掌握CompressO跨平台压缩神器 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO …...
保姆级教程:在Windows上部署字节跳动Piano Transcription,把MP3钢琴曲一键转成MIDI
零基础Windows部署指南:用字节跳动Piano Transcription将钢琴曲转为MIDI 你是否收藏了许多优美的钢琴曲MP3,却苦于无法直接用于音乐创作或学习?字节跳动开源的Piano Transcription项目能将这些音频一键转换为可编辑的MIDI文件。本教程将手把…...
联易融从稳居第一到解锁全球——2026年价值重估逻辑
2026年4月,联易融科技集团(09959.HK)发布2025年全年业绩报告。超越单一数据的点评,从整体视角重新审视2025年报揭示的联易融增长图景——它的过去够不够扎实,它的现在够不够清晰,它的未来够不够可期。先看&…...
紫光同创Pango Design Suite避坑指南:Debug时信号被优化?教你一招搞定
紫光同创Pango Design Suite调试信号保留实战:从原理到避坑 调试FPGA设计时最令人抓狂的场景莫过于:你精心添加的Debug信号在综合阶段神秘消失。这种现象在紫光同创Pango Design Suite中尤为常见,特别是当设计包含复杂状态机、数据通路或FIFO…...
PCCIndex优化:分布式缓存一致性挑战与解决方案
1. 项目概述:PCCIndex优化背景与核心挑战在分布式系统和新型硬件架构快速发展的今天,缓存一致性(Cache Coherence)的设计面临着前所未有的挑战。传统基于硬件的缓存一致性协议(如MESI)在多核处理器场景下表…...
7个高效技巧:用Ice彻底改造你的macOS菜单栏体验
7个高效技巧:用Ice彻底改造你的macOS菜单栏体验 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是否曾因macOS菜单栏图标过多而感到困扰?当十几个应用图标挤在屏幕顶部时&a…...
从根源到实践:系统化解决数据库Duplicate Entry错误
1. 当数据库说"这个数据我见过"时该怎么办? 第一次看到"Duplicate entry"错误时,我正坐在凌晨三点的办公室里,盯着屏幕上那个刺眼的1062错误码发呆。当时我们的用户注册系统刚上线,就遇到了大量注册失败的情况…...
如何永久保存微信聊天记录:WeChatMsg完整指南与数据掌控
如何永久保存微信聊天记录:WeChatMsg完整指南与数据掌控 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeC…...
2026年纯手写论文AIGC率高怎么办?3款降AI工具亲测可降
最委屈的是:这篇论文我是一个字一个字敲出来的,结果知网AIGC检测给了43%。 这种情况不少见。知网的AIGC检测不是判断“这段文字是不是AI写的“,而是检测“文字的统计特征是不是符合AI生成的规律“。如果你的写作习惯和AI高度相似——爱用排比…...
