Kotlin学习笔记六:运算符重载及其他约定

本文深入探讨了Kotlin中的运算符重载机制,包括算术运算符、比较运算符、位运算符等的重载方法,以及如何通过重载实现更自然的代码表达。同时,介绍了Kotlin中集合、区间、解构声明等约定的使用。

Kotlin学习笔记

Kotlin学习笔记一:Kotlin基础
Kotlin学习笔记二:Kotlin的类型系统
Kotlin学习笔记三:函数
Kotlin学习笔记四:类,对象,接口
Kotlin学习笔记五:Lambda编程

运算符重载及其他约定

这个和C++的运算符重载类似,允许你为类定义一些运算符支持的操作,比如+,-,*,/等等,最终还是编译成函数去调用。

重载算术运算符

data class Point(val x : Int, val y : Int){
   
   
    operator fun plus(other : Point) : Point{
   
    //成员函数
        return Point(x + othe r.x, y + other.y)
    }
}

//operator fun Point.plus(other: Point) : Point{ //扩展函数
//    return Point(x + other.x, y + other.y)
//}

fun main(args : Array<String>) {
   
   
    val p1 = Point(2, 3)
    val p2 = Point(3, 4)
    println("p1+p2=${
     
     p1 + p2}")
}

上面定义了一个Point的加法运算符重载,使用的时候就可以直接使用+号进行运算。实际上编译之后还是调用函数:p1.plus(p2)。或者将其定义为扩展函数。

从Java调用Kotlin的重载运算符直接调用函数

用关键字operator定义一个运算符重载函数,之后就可以用相应的符号进行操作,重载的运算符和普通运算符相同。

可重载的二元算术运算符

表达式 函数名
a*b times
a/b div
a%b mod
a+b plus
a-b minus

上面的每个运算符都有一个复合赋值运算符,比如plusAssign, timesAssign等,复合运算符只是修改对象,所以如果定义了一个Unit类型的复合赋值运算符函数,当在使用+=,*=这些运算的时候,就会自动调用这些方法。

定义运算符时不要求两个运算数是相同类型,比如用一个数字来缩放一个点

operator fun Point.times(scale : Double) : Point{
   
   
    return Point((x * scale).toInt(), (y * scale).toInt())
}

operator fun Double.times(p 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值