在Kotlin中,我们不需要再像使用Java时那样傻傻地拼接字符串了,而是可以直接将表达式写在字符串里面,即使是构建非常复杂的字符串,也会变得轻而易举。
首先来看一下Kotlin中字符串内嵌表达式的语法规则:
"hello, ${obj.name}. nice to meet you!"
可以看到,Kotlin允许我们在字符串里嵌入${}这种语法结构的表达式,并 在运行时使用表达式执行的结果替代这一部分内容。 另外,当表达式中仅有一个变量的时候,还可以将两边的大括号省略,如下所示:
"hello, $name. nice to meet you!"
通过一个具体的例子 来学习一下:
val brand = "Samsung" val price = 1299.99 println("Cellphone(brand=" + brand + ", price=" + price + ")")
可以看到,上述字符串中一共使用了4个加号连接符,这种写法不仅写起来 非常吃力,很容易写错,而且在代码可读性方面也很糟糕。
而使用字符串内嵌表达式的写法就变得非常简单了,如下所示:
val brand = "Samsung" val price = 1299.99 println("Cellphone(brand=$brand, price=$price)")
很明显,这种写法不管是在易读性还是易写性方面都更胜一筹,是Kotlin更加推崇的写法。
次构造函数在Kotlin中 很少用,因为Kotlin提供了给函数设定参数默认值的功能,它在很大程度上能够替代次构造函数的作用。 具体来讲,我们可以在定义函数的时候给任意参数设定一个默认值,这样当调用此函数时就不会强制要求调用方为此参数传值,在没有传值的情况下会自动使用参数的默认值。
给参数设定默认值的方式也很简单,如下:
fun printParams(num: Int, str: String = "hello") { println("num is $num , str is $str")}
可以看到,这里我们给printParams()函数的第二个参数设定了一个默认 值,这样当调用printParams()函数时,可以选择给第二个参数传值,也 可以选择不传,在不传的情况下就会自动使用默认值。
测试一下,代码如下:
fun printParams(num: Int, str: String = "hello") { println("num is $num , str is $str") } fun main() { printParams(123) }
结果会打印出如下:
num is 123 , str is hello
可以看到,在没有给第二个参数传值的情况下,printParams()函数自动 使用了参数的默认值。
当然上面这个例子比较理想化,因为正好是给最后一个参数设定了默认值,现在我们将代码改成给第一个参数设定默认值,如下所示:
fun printParams(num: Int = 100, str: String) { println("num is $num , str is $str") }
这时如果想让num参数使用默认值该怎么办呢?模仿刚才的写法肯定是行不通的,因为编译器会认为我们想把字符串赋值给第一个num参数,从而报类型不匹配的错误
不过不用担心,Kotlin提供了另外一种神奇的机制,就是可以通过键值对的方式来传参,从而不必像传统写法那样按照参数定义的顺序来传参。比如调用printParams()函数,我们还可以这样写:
printParams(str = "world", num = 123)
此时哪个参数在前哪个参数在后都无所谓,Kotlin可以准确地将参数匹配上。而使用这种键值对的传参方式之后,我们就可以省略num参数了,代码如下:
fun printParams(num: Int = 100, str: String) { println("num is $num , str is $str") } fun main() { printParams(str = "world") }