Kotlin9- 参数与异常

简介: Kotlin9- 参数与异常

本系列学习教程笔记属于详细讲解Kotlin语法的教程,需要快速学习Kotlin语法的小伙伴可以查看“简洁” 系列的教程

快速入门请阅读如下简洁教程:
Kotlin学习教程(一)
Kotlin学习教程(二)
Kotlin学习教程(三)
Kotlin学习教程(四)
Kotlin学习教程(五)
Kotlin学习教程(六)
Kotlin学习教程(七)
Kotlin学习教程(八)
Kotlin学习教程(九)
Kotlin学习教程(十)

imgKotlin - 参数与异常

#具名参数

具名参数就是在调用函数时,给函数的实参附上形参:

fun sum(arg1: Int, arg2: Int) = arg1 + arg2

fun 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)
}

如果默认参数导致传参出现歧义时,需要使用具名参数。换句话说,就是默认参数后面的参数需要使用具名参数传值。

#多返回值

借助 PairTriple 可以实现函数返回多值(注:伪多返回值),因为 PairTriple 支持 解构 语法:

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<String, Int> {
    // return Pair("lqr", 18)
    return "lqr" to 18
}

fun multiReturnValues(height: Double): Triple<String, Int, Double> {
    return Triple("lqr", 18, height)
}

to 是中缀表达式,返回的就是 Pair,也就是 Map 里的键值对。

#捕获异常

Kotlin 支持 try...catchtry...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
}
相关文章
|
2天前
|
Kotlin
Kotlin - 参数与异常
Kotlin - 参数与异常
|
9天前
|
Kotlin
Kotlin教程笔记(9)- 参数与异常
Kotlin教程笔记(9)- 参数与异常
38 3
|
8天前
|
Java Kotlin
Kotlin15 - 方法重载与默认参数
Kotlin15- 方法重载与默认参数
Kotlin15 - 方法重载与默认参数
|
3月前
|
Android开发 Kotlin
Android面试题之kotlin中怎么限制一个函数参数的取值范围和取值类型等
在Kotlin中,限制函数参数可通过类型系统、泛型、条件检查、数据类、密封类和注解实现。例如,使用枚举限制参数为特定值,泛型约束确保参数为Number子类,条件检查如`require`确保参数在特定范围内,数据类封装可添加验证,密封类限制为一组预定义值,注解结合第三方库如Bean Validation进行校验。
61 6
|
4月前
|
存储 Kotlin
Kotlin中的内联函数:提升性能与解决Lambda表达式参数问题
Kotlin中的内联函数:提升性能与解决Lambda表达式参数问题
|
安全 Java Kotlin
Kotlin中空安全操作符,异常处理和自定义异常,以及先决条件函数详解
Kotlin中空安全操作符,异常处理和自定义异常,以及先决条件函数详解
120 0
|
安全 Java 编译器
【Kotlin 初学者】空安全与异常
在Java中,定义一个变量可以默认不赋值,因为Java的系统会给我们默认赋一个默认值,并且Java可定义一个赋值为null的变量,这样在使用这个变量的时候都会去显示判断该变量是否为null。这使得在Java中我们司空见惯的空指针异常NullPointerException,带给了我们很多麻烦。
359 0
【Kotlin 初学者】空安全与异常
|
Android开发 Kotlin
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )
273 0
【错误记录】Android Studio 编译时 Kotlin 代码编译报错 ( 升级支持库时处理 @NonNull 参数 )
|
Android开发 Kotlin
Android 开发中 Kotlin Coroutines 如何优雅地处理异常
Android 开发中 Kotlin Coroutines 如何优雅地处理异常
393 0
|
Kotlin
用Kotlin的方式来处理网络异常
用Kotlin的方式来处理网络异常
204 0