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

kotlin函数

1、函数定义

// 下边定义了main函数
fun main() {}

2、函数的类型

// foo函数定义
fun foo () {} // 对应无参类型 () -> Unit
fun foo (a: Int):String {} // 对应有参类型 (Int) -> String

3、函数的引用

函数的引用类似C语言中的函数指针,可用于函数传递:

fun foo() {} // 如果想引用foo函数,需要使用 ::foo
fun foo(a:String):Any {} // 如果想引用有参foo函数,跟上边一样需要使用 ::foo// 类中方法的引用,需使用 Foo::bar
class Foo{fun bar(){}
}

实际引用例子:

fun foo() {}
fun bar(a:String):Any { return "Hello"}
class Foo {fun bar(a:String):Any { return "Hello"}
}
// 引用foo函数
val fn:() -> Unit = ::foo
// 引用bar函数
val bfn:(String) -> Any = ::bar
// 引用Foo类的bar方法
val fooFn:(Foo, String) -> Any = Foo::bar
// ================================================================
// 上边类中的方法引用,也可以用下面这种形式
val f = Foo() // 实例化类
val fbar = f::bar // 使用实例化的对象f::bar方法,也可以引用Foo类中的bar方法
// ================================================================
// 调用
fun main() {// 引用foo函数val fooFn:(String) ->Unit = ::foo// 调用foo函数fooFn("1")
}
// 定义foo函数
fun foo(a:String) {println(a) // 1
}

相当于js中的:

function foo(a) {console.log(a) // 1
}
let afn = foo
afn("1")

4、函数中的变长参数

// 方法定义
fun main() {foo("a","b","c")
}
fun foo(vararg a:String) {println(a.toList()) // 把传进来的参数转成List [a,b,c]// 打印参数println(a.joinToString()) // a,b,c
}

kotlin内置的函数参数中很多都是定义的变长参数,如 listOf:

public fun <T> listOf(vararg elements: T): List<T>

5、函数的伪多返回值

多返回值,其实就是返回类型下手,比如返回Pair类型:

// 方法定义
fun main() {// 函数调用方式1 -> 解构方式取值val (r1, r2) = foo()println("r1:$r1,r2:$r2") // r1:a,r2:b// 函数调用方式2 -. 正常取值val r:Pair<String, String> = foo()println("r:$r") // r:(a, b)
}
fun foo():Pair<String,String> {return Pair("a", "b")
}

6、函数默认参数

// 方法定义
fun main() {foo()foo("world")
}
// 定义默认参数
fun foo(a:String = "hello"):Unit {println("a:$a") // a:hello  /  a:world
}

7、函数具名参数

// 方法定义
fun main() {foo(b="world") // 使用具名参数,指定传给函数的某个参数
}
// 定义默认参数
fun foo(a:String = "hello", b:String):Unit {println("$a, $b") // hello, world
}

8、总结

相关文章:

kotlin函数

1、函数定义 // 下边定义了main函数 fun main() {} 2、函数的类型 // foo函数定义 fun foo () {} // 对应无参类型 () -> Unit fun foo (a: Int):String {} // 对应有参类型 (Int) -> String 3、函数的引用 函数的引用类似C语言中的函数指针&#xff0c;可用于函数传…...

深入理解计算机系统 CSAPP 家庭作业7.12

A:refptr (unsigned)(ADDR(r.symbol) r.addend - refaddr) 0x4004f8 (-4) - 0x4004ea 0xa B:refaddr 0x4004d0 0xa 0x4004da refptr 0x400500 (-4) - 0x4004da 0x22 ​​​​​​​...

Batch脚本中的环境变量沙盒:setlocal与endlocal全解析

Batch脚本中的环境变量沙盒&#xff1a;setlocal与endlocal全解析 在Windows的批处理&#xff08;Batch&#xff09;脚本世界中&#xff0c;setlocal和endlocal是两个至关重要的命令&#xff0c;它们为脚本中环境变量的修改提供了一个隔离的环境。这就像是为变量创建了一个临时…...

AI引领创意潮流:高效生成图片,参考图助力,一键保存到指定文件夹

在这个数字与创意交融的时代&#xff0c;我们迎来了AI绘画的新纪元。借助先进的AI技术&#xff0c;我们不仅能够高效生成图片&#xff0c;还能在参考图的启发下&#xff0c;激发无限创意&#xff0c;让您的想象力在数字世界中自由翱翔。 首助编辑高手软件中的魔法智能绘图板块&…...

ADOP带你了解:数据中心的高速互联解决方案

随着大语言模型和AIGC的飞速发展&#xff0c;数据中心对于高速、高可靠性的网络连接需求日益增长。ADOP系列产品正是在这样的背景下应运而生&#xff0c;为现代数据中心提供了全面的连接解决方案。 ADOP系列产品概览 ADOP系列产品旨在为云、高性能计算、Web 2.0、企业、电信、…...

使用SpringBoot整合Servlet

一、SpringBoot和Servlet的整合 1、用注解WebServlet配置Servlet映射 创建一个SpringBoot的web工程&#xff0c;在工程用创建一个Servlet 2、在SpringBoot的启动类上加注解ServletComponentScan 二、额外的方式 1、不使用WebServlet配置Servlet映射 创建一个SpringBoot工…...

vue引入eachrts

1. 安装Echarts 使用npm npm install echarts --save 导入Echarts插件 import echarts from echarts Vue.prototype.$echarts echarts import echarts from echarts 我们来做个简单的实例首先需要一个容器装下Echarts <template><div id"list"…...

c++ 智能指针实战分析

一.智能指针的设计思路 智能指针是类模板&#xff0c;再栈上创建智能指针对象。把普通指针交给智能指针对象。智能指针对象过期时&#xff0c;调用析构函数释放普通指针的内存。 智能指针的类型 auto_ptr是C98的标准&#xff0c;c17已经弃用。unique_ptr、shared_ptr和weak_…...

3D Web轻量引擎HOOPS Web Platform赋能AEC行业数字化,高效渲染与多格式支持!

在建筑、工程和施工&#xff08;AEC&#xff09;行业&#xff0c;数字化转型和高效协作正变得越来越重要。为应对日益复杂的项目需求和不断提升的质量标准&#xff0c;AEC企业需要一种强大的工具来实现高效的3D可视化和数据管理。HOOPS Web Platform作为一款综合性3D开发平台&a…...

学术英语写作为什么会成为留学生的压力?

对留学党来说&#xff0c;从出国前的标准化测试、申请文书&#xff0c;到留学后的学业要求&#xff0c;都需要用到学术英语写作。可以说&#xff0c;学术英语写作对留学生涯有着重要影响。 然而&#xff0c;这却是令很多中国学生头疼的问题&#xff0c;中国学生往往在数学、物…...

docker 安装达梦8

背景 X86-64架构使用Docker安装dm8_20240422_x86_rh6_64_rq_std_8.1.3.100_pack2.tar 1.下载Docker安装包 达梦官网下载dm8_20240422_x86_rh6_64_rq_std_8.1.3.100_pack2.tar安装包 快速下载通道&#xff1a; 达梦镜像包 2.将安装包上传至服务器&#xff0c;并加载镜像 拷…...

npm常用命令大全(非常详细)

npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理工具&#xff0c;它允许你安装、更新、删除和管理Node.js项目的依赖。 以下是npm的一些常用命令&#xff0c;按照不同的功能进行分类和解释&#xff1a; 1. 初始化项目 init # 初始化一个新的npm项目&…...

东西方文化与管理探讨汉捷咨询汉捷咨询

东西方文化的发展不同&#xff0c;对于管理实践的影响也不相同。汉捷咨询从东西方文化的差异以管理体系的差异进行深层次分析&#xff0c;希望这些分析对企业家的管理实践起到良好的启发作用。 东西方文化的差异 东西方人在思维方式上存在的差异&#xff0c;其根源是什么呢&a…...

行业案例 | 智能终端设备的数据基础从哪儿来?

智能终端的快速发展让我们在许多科幻电影中看到的“未来场景”正在一步步变为现实&#xff1a;智能家居正在解放我们的双手&#xff0c;工业机器人让生产效率倍增&#xff0c;智能穿戴设备让我们便利地感知自身与外部的连结……然而&#xff0c;要想让万物“智联”&#xff0c;…...

《Windows API每日一练》6.1 鼠标基础知识

本节我们讲述鼠标的一些基础知识。 本节必须掌握的知识点&#xff1a; 鼠标 6.1.1 鼠标 鼠标是1964年由Douglas Engelbart发明的&#xff0c;用来取代由键盘输入的繁琐指令&#xff0c;简化电脑操作。早期的鼠标是单键鼠标&#xff0c;只有一个键&#xff0c;后来逐步改进为双…...

闹大了!OpenAI 宣布终止提供API服务

事件背景&#xff1a; OpenAI宣布终止对中国提供API服务&#xff0c;影响中国大陆的API开发者。受影响的开发者收到OpenAI的警告信&#xff0c;要求7月9日后停止服务。 OpenAI的业务和营收&#xff1a; 2023年营收16亿美元&#xff0c;2024年上半年年化营收达34亿美元。营收来…...

java里的空接口实现它有什么用?

我们在看源码时&#xff0c;经常会看到一些空接口&#xff0c;这些空接口里没有一个方法&#xff0c;实现它有什么作用呢&#xff1f;让我们先找几个常见的空接口看看。 一、Serializable接口 在Java中&#xff0c;一个常见的空接口就是java.io.Serializable。 public inter…...

Spring的jar包下载(最新版6.0版本)

1.在Spring官网的projects下面点击spring-framework 2.进入github官网 3.进入github后往下滑&#xff0c;点击Spring Framework Artifacts 4.往下滑找到 点击 5.在左边先点击Artifacts&#xff0c;在右边找到 libs-snapshot&#xff0c;展开libs-snapshot&#xff08;之前其他…...

解决Java中数据库连接泄露的技术

解决Java中数据库连接泄露的技术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 介绍 在Java应用程序中&#xff0c;数据库连接的泄露是一个常见且影响性能的…...

网页视频录制,分享3种好方法

随着互联网的飞速发展&#xff0c;视频内容在网页上的呈现与传播变得日益普遍。网页视频录制作为一种重要的技术手段&#xff0c;不仅方便了我们获取和保存网页上的视频内容&#xff0c;还为教育、娱乐、营销等多个领域提供了全新的应用可能。 但是网页视频怎么录制&#xff1…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...