Kotlin基础知识_04-字符串内嵌表达式&函数参数默认值

Kotlin基础知识_04-字符串内嵌表达式&函数参数默认值

1. 字符串内嵌表达式

Kotlin简化了表达式的拼接,如java中的下列写法:

String brand = "Samsung";
double price = 1299.99;
System.out.println("Cellphone(brand=" + brand + ", price=" + price + ")");

在kotlin中可简化为:

val brand = "Samsung"
val price = 1299.99
println("Cellphone(brand=$brand, price=$price)")

如果是表达式,则可以在字串里面嵌入{}这种语法结构,如:

fun main() {
    val dog = Dog(20, "nick")
    println("The dog.name: ${dog.name}, dog.age: ${dog.age}")
}

2. 函数参数默认值

kotlin可以给函数参数指定默认值,这样可以简化java中部分重载函数的写法:

fun showPersonInfo(age: Int = 20, name: String = "ZhangSan", address: String = "Beijing") {
    println("The person name: $name, age: $age, address: $address")
}

fun main() {
    showPersonInfo(20, "Lil", "XiAn")
    showPersonInfo(30, "Bob")
    showPersonInfo(30)
    // 通过键值对的方式传参
    showPersonInfo(name = "ana")
    showPersonInfo(address = "NanJing", name = "Leo")
}

运行:

The person name: Lil, age: 20, address: XiAn
The person name: Bob, age: 30, address: Beijing
The person name: ZhangSan, age: 30, address: Beijing
The person name: ana, age: 20, address: Beijing
The person name: Leo, age: 20, address: NanJing

如上例,可以为每个函数参数均指定一个默认值,这样当调用时若发现指定的参数没有传值,就会使用默认值代替。

main()函数中第五行,只传了一个参数 ana, 这样编译器会默认匹配第一个参数类型 age, 这显然是不对的,因为传入的是String类型, 但第一个参数类型是 Int类型,可以通过 参数名 = 参数值的形式手动告诉编译器传入的参数应该对应到哪一个参数上面。

另外,参数的顺序可以颠倒,比如第6行可以先传入 address, 再传入 name, 不过也要通过键值对的方式指定清楚。

简化次构造函数

函数参数默认值的特性可以最大限度的简化次构造函数,例如,可以在主构造函数中这样写:

class BetStudent(val sno: String = "", val grade: Int = 0, name: String = "", age: Int = 0) :
    Person(name, age) {
}

这样就不需要重载一堆的次构造函数了。即使某个参数值没有写,也可以使用默认的参数值。

posted @ 2023-11-02 10:53  夜行过客  阅读(102)  评论(0编辑  收藏  举报