Kotlin - 参数与异常
发布日期:2021-06-30 18:37:49
浏览次数:2
分类:技术文章
本文共 2165 字,大约阅读时间需要 7 分钟。
具名参数
具名参数就是在调用函数时,给函数的实参附上形参:
fun sum(arg1: Int, arg2: Int) = arg1 + arg2fun main(vararg args: String) { sum(arg1 = 2, arg2 = 3) sum(arg2 = 3, arg1 = 2)}
使用具名参数可以把实参精确的传递给指定形参,因此具名参数可以不用按顺序传入。
变长参数
vararg
可以让某个参数接收多个值,vararg
修饰的参数称为变长参数:
fun hello(vararg ints: Int, string: String) { ints.forEach(::println) println(string)}fun main(vararg args: String) { // hello(1, 2, 3, 4, 5, "hello") // IDE报错:Type mismatch. Required:Int Found:String hello(1, 2, 3, 4, 5, string = "hello")}
- 变长参数可以不为最后一个参数
- 如果传参时有歧义,需要使用具名参数
展开操作符(Spread Operator)
当变长参数需要传入一个数组时,可以使用展开操作符 *
,*
会将数组展开后一一传入:
val array = intArrayOf(1, 2, 3, 4, 5)hello(*array, string = "Hello") // vararg变长参数场景下,*号可以把Array数组展开,但不支持List
展开操作符 *
有以下几个特点:
- 只支持展开 Array
- 只用于变长参数列表的实参
- 不是一般意义上的操作符,不能重载
默认参数
默认参数,即可以为函数任意位置的参数指定默认值:
fun say(age: Int = 20, name: String, height: Float) { ...}fun main(vararg args: String) { say(18, "lqr", 2.0f) say(name = "lqr", height = 2.0f)}
如果默认参数导致传参出现歧义时,需要使用具名参数。换句话说,就是默认参数后面的参数需要使用具名参数传值。
多返回值
借助 Pair
和 Triple
可以实现函数返回多值(注:伪多返回值),因为 Pair
和 Triple
支持 解构
语法:
fun main(vararg args: String) { val (myName, myAge) = multiReturnValues() println("myName is $myName, myAge is $myAge") val (name, age, height) = multiReturnValues(180.0) println("name is $name, age is $age, height is $height")}fun multiReturnValues(): Pair{ // return Pair("lqr", 18) return "lqr" to 18}fun multiReturnValues(height: Double): Triple { return Triple("lqr", 18, height)}
to
是中缀表达式,返回的就是Pair
,也就是 Map 里的键值对。
捕获异常
Kotlin 支持 try...catch
或 try...catch...finally
捕获异常,catch 分支匹配异常类型,finally 无论代码是否抛出异常都会执行:
try { val arg1 = args[0].toInt() val arg2 = args[1].toInt() println("$arg1 + $arg2 = ${ sum(arg1, arg2)}")} catch (e: NumberFormatException) { println("输入的数据不是数字")} catch (e: ArrayIndexOutOfBoundsException) { println("需要输入2个数字")} catch (e: Exception) { println("出现未知异常:${ e.message}")} finally { println("感谢使用")}
跟 if、when 一样,try...catch
也可以是表达式,可以用来赋值:
val result = try { args[0].toInt() / args[1].toInt()} catch (e: Exception) { 0}
转载地址:https://linqiarui.blog.csdn.net/article/details/113447540 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月22日 21时06分46秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【转载】将Ubuntu16.04 中gedit在仅显示一个文件时显示文件名tab
2019-04-30
fstream 对象多次使用时注意clear
2019-04-30
调试 LenaCV 3D Camera (Linux)
2019-04-30
OpenCV杂记 - Mat in C++
2019-04-30
lnmp部署
2019-04-30
location区段
2019-04-30
nginx访问控制、基于用户认证、https配置
2019-04-30
用zabbix监控nginx
2019-04-30
SaltStack
2019-04-30
Jenkins 控制台输出中的奇怪字符
2019-04-30
Linux添加系统调用
2019-04-30
linux内存的寻址方式
2019-04-30
ubunut16.04的pip3出现问题,重新安装pip3
2019-04-30
how2heap-double free
2019-04-30
how2heap-fastbin_dup_consolidate
2019-04-30
orw_shellcode_模板
2019-04-30
[fmt+shellcode]string
2019-04-30
fmt在bss段(neepusec_easy_format)
2019-04-30