中缀表达式
- 只有一个参数,用infix修饰的函数
- 举例:
class Book(val name:String){
infix fun on(place:String){
print("《$name》放到${place}上了!")
}
override fun toString(): String {
return "我拥有《$name》这本书"
}
}
fun main(args: Array<String>) {
val myBook = Book("简爱")
println(myBook)
myBook on "桌子"
}
IF表达式
在kotlin中if语句不仅可以像java中那样来使用,还可以有返回值,所以我们可以直接接收一个if表达式的值,如:
private const val SUPER_USER = 1
private const val COMM_USER = 2
fun main(args: Array<String>) {
val userRoleId = if(args.isNotEmpty() && args[0]=="admin"){
SUPER_USER
}else{
COMM_USER
}
println(userRoleId)
}
像上面这样,其中的变量userRoleId就可以直接声明成常量(val),如果在java中则不能这么做,需要声明一个 变量 userRoleId,然后再去走判断的逻辑,根据不同if分支逻辑赋值为相应的值。
-
注意 IF表达式在使用时必须遵循逻辑的完整性,如:
val value = 3
val x = if(value<0) 0 else value //正确
val y = if(value<0) 0 //错误,赋值时,分支必须完备
When表达式
when表达式可以看成是java中switch的加强版,更加简单暴力且支持任意类型,比如下面的java代码:
public static void main(String args[]) {
int code = Integer.parseInt(args[0]);
String rankName;
switch (code) {
case 0:
case 1:
rankName = "冠军";
break;
case 2:
rankName = "亚军";
break;
case 3:
rankName = "季军";
break;
default:
rankName = "无";
}
System.out.println(rankName);
}
这么长的一段java代码,在kotlin中则可以大大简写成下面的样子:
fun main(args: Array<String>) {
val code = Integer.parseInt(args[0])
val rankName: String
when (code) {
0,1 -> rankName = "冠军"
2 -> rankName = "亚军"
3 -> rankName = "季军"
else -> rankName = "无"
}
println(rankName)
}
可以看到if语句是可以直接写成when语句的,switch中每句的break也省了(大多数我们每条case都有break的),default则直接用else代替了。再举个when的使用例子:
fun main(args: Array<String>) {
val book:Book = ChineseBook("水浒传")
when(book){
is ChineseBook -> println("是一本中文书,${book.getCnBookName()}")
is EnglishBook -> println("是一本英文书,${book.getEnBookName()}")
else -> print("未知语言书籍")
}
val bookNameSize = when{
book.toString().isNotEmpty() -> book.toString().length
else -> 0
}
print("书名长度$bookNameSize")
}
open class Book
class ChineseBook(val name:String):Book(){
fun getCnBookName():String{
return "中文书名《$name》"
}
override fun toString(): String {
return name
}
}
class EnglishBook(val name:String):Book(){
fun getEnBookName():String{
return "英文书名《$name》"
}
override fun toString(): String {
return name
}
}
从上面可以看出when同if一样,也可以带返回值。