概述
文章目录
- 1、运算符和表达式
- 1.1 单目前缀运算符
- 1.2 自加(++)自减(--)
- 1.3 双目算术运算符
- 1.4 区间运算符
- 1.4.1 闭区间运算符 两个西文点符
- 1.4.2 半开区间运算符 until
- 1.4.3 反向区间 downTo
- 1.4.4 区间步长
- 1.4.5 运算符重载
- 1.4.5.1 重载单目前缀运算符
- 1.4.5.2 重载其他的运算符
1、运算符和表达式
Kotlin 不支持 Java 的三目运算符,Kotlin 使用 if else 代替三目运算,Kotlin 中的运算符都是以方法形式来实现的
1.1 单目前缀运算符
运算符 | 对应的方法 |
---|---|
+a | a.unaryPlus() |
-a | a.unaryMinus() |
!a | a.not() |
var a = 10
var b = -a
val c = a.unaryMinus()
println("b:${b},c:${c}") //b 和 c 的结果是一样的
val flag = true
val notFlag = !flag
val notFlag2 = flag.not()
println("notFlag:${notFlag},notFlag2:${notFlag2}")// !flag() 和 flag.not() 结果也是一样的
因此在查阅 API 发现某个类有 unaryPlus() 、 unaryMinus()、not() 方法,则该类的实例可以使用单目前缀运算符 “+、-、!” 进行运算
1.2 自加(++)自减(–)
运算符 | 对应的方法 |
---|---|
a++ | a.inc() |
a– | a.dec() |
和 Java 同样 ++ 、 – 放在前面和后面的区别:
- 当 ++、- - 放在变量前面时,执行过程如下:
先对变量调用 inc() 或 dec() 方法,并将方法返回值赋给当前变量;
自加或自减表达式返回变量的新值; - 当 ++ 、- - 放在变量后面时,执行过程如下:
先用一个临时变量缓存当前变量的值;
对变量调用 inc()、 dec() 方法, 并将方法返回值赋给变量;
自加或自减表达式返回临时变量的值;
如果在查阅API时发现某个类有 inc() 、dec() 方法,那么说明该类可以使用 ++ 、- - 进行运算。
1.3 双目算术运算符
运算符 | 对应的方法 |
---|---|
a + b | a.plus(b) |
a - b | a.minus(b) |
a * b | a.times(b) |
a / b | a.div(b) |
a % b | a.rem(b) |
a…b | a.rangeTo(b) |
1.4 区间运算符
1.4.1 闭区间运算符 两个西文点符
闭区间运算符 a两个点b 用于定义一个从 a ~ b(包含 a、b 边界值)的所有值的区间。对于闭区间运算符而言,a 不能 大于 b,否则运行时将会报错。
比如 for-in 循环:
fun main(args: Array<String>){
// 使用比区间运算符定义区间
var rangel = 1..5
for(num in rangel){
println("${num} * 2 = ${num * 2}")
}
}
1.4.2 半开区间运算符 until
半开区间运算符 a until b 用于定义一个从 a~b(包含 a 边界值,但不包含 b 边界值)的所有值的区间。a 也不能大于 b。如果 a until b 中 a 与 b 的值相等,则会产生一个空区间,该区间不包含任何值;如果 a…b 中 a 与 b 的值相等则只会包含一个值。利用半开区间遍历数组等列表(索引是 0 到长度减 1)比较方便,例如:
varl lang = arrayOf("kotlin","java","python","C")
for(index in 0 until lang.size){
printlin("第 ${index + 1} 种语言是:${lang[index]}")
}
1.4.3 反向区间 downTo
如果程序希望区间可以从大到小,则可以使用 downTo 运算符(其实是一个 infix 函数),该运算符同样构建一个闭区间。对于 a downTo b 而言, b 不能大于 a 。
1.4.4 区间步长
之前见到的所有区间的默认步长都是 1 ,也就是区间内两个值之间的差值是 1 。 我们可以通过 step 运算符(其实是一个 infix 函数)可以显示指定区间的步长。例如:
for(num in 10 downTo 0 step 2) {// 从 10 到 0 递减 步长 为 2
}
1.4.5 运算符重载
Kotlin 的运算符都是靠特定名称的方法来支撑的,因此只要重载这些方法,我们可以为任意类添加这些运算符。重载运算符的方法需要用 operator 修饰符进行标记。
1.4.5.1 重载单目前缀运算符
只需要为对应的类定义名称为 unaryPlus()、 unaryMinus() 、 not() ,且以 operator 修饰,程序即可对该类的实例使用 +、-、! 单目前缀运算,例如:
data class Data(val x: Int, val y: Int) {
operator fun unaryMinus(): Data {// 重载 unaryMinus() 方法 加上 operator 修饰符
return Data(-x,-y)//
}
operator fun Data.not(): Data {// 重载 not() 方法,加上 operator 修饰符
return Data(-x,-y)
}
fun main(args: Array<String>){
val dt = Data(6,9)
println(-dt) // 对 dt 实例 调用 单目运算 - ,输出 Data(x= -6, y= -9)
println(!d) //对 dt 实例 调用单目运算 ! ,输出 Data(x = -6, y = -9)
}
}
1.4.5.2 重载其他的运算符
同上面一样,还可以重载:
- 自加自减运算符 重载 inc() 自加, dec() 自减 加上 operator 修饰符
data class Data(val x: Int, val y: Int){ operator fun inc(): Data{ return Data(x + 1, y + 1) } }
- 双目算数运算: 类似的 重载 plus()、 minus()、times()、div()、rem()、rangeTo() ,且以 operator 修饰便可以对该类的实例使用 +、-、*、/、%、. . 这些运算符。
最后
以上就是精明枕头为你收集整理的Kotlin 学习笔记 2 Kotlin 中的运算符1、运算符和表达式的全部内容,希望文章能够帮你解决Kotlin 学习笔记 2 Kotlin 中的运算符1、运算符和表达式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复