kotlin之拓展函数与运算符重载

今天同事提到kotlin的拓展函数,他觉得kotlin这个概念很牛,浅浅学了一下,从里面闻到到和C++一样的味道。也许他之前是写java的吧,java没有这个东西。
同时今天发现了kotlin官方文档中文翻译

拓展函数的优点

Kotlin 的拓展函数是一种强大的机制,它允许我们在不修改类定义的情况下向类添加新的功能。通过使用拓展函数,我们可以提高代码的可读性和可维护性,使代码更加模块化和灵活。

语法定义

fun ClassName.functionName(parameters): ReturnType {
    // 函数体
}

其中,ClassName 是我们希望给其添加新功能的类名,functionName 是我们为该类定义的新函数名。parameters 是函数的参数列表,ReturnType 是函数的返回类型

举例

下面是一个拓展函数的例子,我们为 String 类添加一个 customLength() 函数,用于计算字符串的长度:

fun String.customLength(): Int {
    var count = 0
    for (char in this) {
        count++
    }
    return count
}

在上面的例子中,String 是我们希望给其添加新功能的类名,customLength 是我们为该类定义的新函数名。该函数没有参数,返回一个整数类型的值,表示字符串的长度。在函数体中,我们使用了 this 关键字来引用调用该函数的字符串对象。

使用拓展函数与调用普通函数一样简单。例如,我们可以像下面这样调用上述定义的 customLength() 函数:

val str = "Hello, World!"
val length = str.customLength()
println("字符串的长度为:$length")

输出结果为:

字符串的长度为:13

除了在拓展函数中使用 this 关键字引用调用对象外,我们还可以使用 this 关键字来引用调用对象的属性和方法。

需要注意的是,拓展函数并不能访问类的私有成员,它只能访问类的公共成员。

运算符重载

当我们在编写 Kotlin 程序时,有时候希望能够对自定义的类进行运算符操作,比如对两个对象进行相加、相减等操作。为了实现这个需求,Kotlin 提供了运算符重载的功能。

运算符重载是指在类中定义特定的函数来改变运算符的行为。通过重载运算符,我们可以自定义类的对象之间的运算行为,使其更符合我们的需求。

Kotlin 支持重载的运算符包括:+、-、、/、%、++、–、+=、-=、=、/=、%=、==、!=、<、>、<=、>=、[]、()、= 等。

下面是一个例子,我们定义了一个名为 Point 的类,用于表示二维平面上的一个点。我们希望能够对两个 Point 对象进行相加、相减操作,并重载 + 和 - 运算符:

class Point(val x: Int, val y: Int) {
    operator fun plus(other: Point): Point {
        return Point(x + other.x, y + other.y)
    }
    
    operator fun minus(other: Point): Point {
        return Point(x - other.x, y - other.y)
    }
}

fun main() {
    val p1 = Point(3, 4)
    val p2 = Point(1, 2)
    
    val sum = p1 + p2
    println("相加后的点:(${sum.x}, ${sum.y})")
    
    val diff = p1 - p2
    println("相减后的点:(${diff.x}, ${diff.y})")
}

在上面的例子中,我们在 Point 类中定义了 plus() 和 minus() 函数,并使用 operator 关键字来标记这两个函数是运算符重载函数。plus() 函数用于重载 + 运算符,实现两个点的相加操作;minus() 函数用于重载 - 运算符,实现两个点的相减操作。

在 main() 函数中,我们创建了两个 Point 对象 p1 和 p2,然后使用 + 和 - 运算符对它们进行操作,并将结果打印出来。

输出结果为:

相加后的点:(4, 6)
相减后的点:(2, 2)

通过重载运算符,我们可以使自定义的类对象之间的运算更加直观和易于理解。运算符重载为我们提供了更大的灵活性和可读性,使代码更加优雅和简洁。

需要注意的是,运算符重载函数必须在类内部定义,并且使用 operator 关键字进行标记。此外,不是所有的运算符都可以被重载,具体可以参考 Kotlin 的文档。

总而言之,Kotlin 的运算符重载功能为我们提供了一种定制类对象运算行为的方式。通过重载运算符,我们可以使代码更加简洁和易于理解,提高程序的可读性和可维护性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是李校长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值