26-一元运算符
4.7.1 一元运算符
一元操作符主要分为一元前缀操作符和自增自减操作符。
1.一元前缀操作符
对于表4-7的表达式+a来说,编译器处理流程如下。
| 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | | +a | a.unaryPlus() | | -a | a.unaryMinus() | | !a | a.not() |
(1)确定a的类型,令其为T。
(2)为接收者T查找带有operator修饰符的无参函数unaryPlus(),即成员函数或扩展函数。
(3)如果函数不存在或不明确,则产生编译错误。
(4)如果函数存在且其返回类型为R,那就表明表达式+a具有R类型。
2.自增自减操作符
自增自减操作符分为自增(++)和自减(--)两种运算符,使用自增自减操作符可以有效地简化代码,在Kotlin中,对应的转换方法如表4-8所示。
| 表达式 | 对应转换方法 | | :----- | :----- | :----- | :----- | | a++ | a.inc() | | a-- | a.dec() |
对于表4-9的表达式a++来说,编译器处理流程如下。
(1)确定a的类型,令其为T。
(2)查找一个适用于类型T的接收者,同时带有operator修饰符的无参数函数inc()。
(3)检查函数的返回类型是否为T的子类型。
自增和自减运算符可以放在变量的前面或者后面,其执行结果大相径庭。代码如下。
var a=5
println(a++) //输出5
println(++a) //输出7
自增自减运算符放在变量的前面,如++a,表示先执行运算再使用生成的值;放在变量的后面,表示先使用值再进行运算。