Kotlin语言里的小魔术之内嵌表达式和函数的参数默认值

1. Kotlin语言里的小魔术

1.1字符串内嵌表达式

首先来看一下Kotlin语言中的字符串内嵌表达式的语法结构:

"hello , ${obj.name} . nice to meet you!"

可以看到,Kotlin允许我们在字符串里面嵌入${}这种语法结构的表达式,
并且运行的时候可以使用这个表达式的执行结果来代替这一部分的内容

当表达式只有一个参数的时候{}可以省略.

hello , $obj.name . nice to meet you!

这里我们举一个例子来说明一下:
这是不用内嵌表达式的时候
fun main() {
    var name = "Tom"
    var age = 18
    println("name is " + name + ", and age is " + age)
}
这是用了内嵌表达式的时候
fun main() {
    var name = "Tom"
    var age = 18
    println("name is $name, and age is $age")
}

运行结果:
在这里插入图片描述

相信你也体会到内嵌表达式的快捷之处了吧.

1.2 函数参数的默认值

我们最开始在学习次构造函数的时候就说过,次构造函数在Kotlin中很少,
因为Kotlin提供了函数设定默认值的功能,
它在很大程度上能够代替次构造函数.

给函数参数设定默认值:

fun printParams(num: Int=100, str: String = "hello") {
    println("num is $num and str is $str")
}

下面我们来运行一下这个代码:

fun main() {
  printParams()
}

fun printParams(num: Int=100, str: String = "hello") {
    println("num is $num and str is $str")
}

运行结果:
在这里插入图片描述

fun main() {
//    先使用函数参数的默认值
    printParams()
    println("---------------------")
//    这里我们手动给函数参数赋值
    printParams(99, "World")
}

fun printParams(num: Int = 100, str: String = "hello") {
    println("num is $num and str is $str")
}

运行结果:
在这里插入图片描述

如果这时我们想让num参数使用默认值该怎么办?(如果模仿刚才的写法, 
编译器会认为我们想把字符串赋值给第一个参数, 从而报参数类型不匹配的错误.)

在这里插入图片描述

这时我们就需要用Kotlin提供的另一种机制,按照键值对的方式来传参,
从而不需要向传统写法那样按照参数定义的顺序来传参,这时我们可以这样写:

在这里插入图片描述

我们来看一下我们以前在学习次构造函数时写的代码:
open class Person(name: String, age: Int)

class Student(val sno: String, val grade: Int, name: String, age: Int) : Person(name, age) {
    // 第一个次构造函数
    constructor(name: String, age: Int) : this("", 0, name, age) {}

    //第二个次构造函数
    constructor() : this("", 0) {}
}
上述代码中有一个主构造函数和两个次构造函数,
次构造函数的作用是提供了使用更少参数来对Student类进行实例化的方式. 
无参的次构造函数会调用两个参数的次构造函数,并将这2个参数赋值成为初始值.

其实这种写法在Kotlin中是完全没有必要的, 
因为我们完全可以通过只编写一个主构造函数,
然后给参数设定默认值的方式来实现:
class Student(val sno: String = "", val grade: Int = 0, name: String = "", age: Int = 0) :
    Person(name, age) {
}
在给主构造函数的每个参数都设置默认值后,
我们就可以使用任何的传参组合来对Student类进行实例化, 
当然也包含了刚刚两个次构造函数的情形.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeJiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值