Kotlin使用infix关键字构建高可读性代码

自从Google推出Kotlin作为官方开发语言后,一堆像我这样的习惯Java开发的程序员从不习惯到爱上这门语言只用了很短的时间,相比于Java语言,kotlin集各家所长,可以使用更少的代码,实现更多更复杂的需求,而且可读性还很高。试问,这样的语言谁不爱呢?而且Kotlin和Java还可以相互兼容使用。只要我们简单的记一下Kotlin的基本语法,使用Kotlin编程会非常的容易且丝滑。

今天在阅读源码的时候发现了下图中的这样一段代码: 看到这个implies时,我很疑惑,它难道是kotlin的一个关键字吗?然后百度发现不是,然后突然想到Kotlin有扩展函数的概念,所以才想起来这个可能也是Kotlin使用扩展函数和其他啥功能一起组合起来的,然后点进implies里面看到它是这么定义的: 然后就发现了关键字infix,所以就去了解了下infix的意义以及使用。infix 函数是Kotlin提供了一种高级语法糖特性。infix函数只是把编程语言函数调用的语法规则调整了一些而已 比如在定义Map时可以如下定义: A to B这样的写法实际上等价于A.to(B)的写法。

kotlin 复制代码
 val myMap = mapOf("key" to "value")

查看to的定义会发现它是用扩展函数加infix函数实现的: 通过这样的加工就会让代码读起来更方便,而implies关键字我们可以理解为意味着returns() implies true就可以理解为正常返回意味着值为true:"key" to "value" 可以理解为key 和value属于一组键值对,如果觉得to这个词不好理解,也可以仿造to的infix定义自己实现一个。下面我们用一个实例来实现一个infix函数,代码如下:

kotlin 复制代码
fun main(args: Array<String>) {
    println("Program arguments: ${args.joinToString()}")
    var res = "Hello World" beginWith "Hello"
    print("判断字符是否以某个词开头:$res")
}

infix fun String.beginWith(prefix:String) = startsWith(prefix)

上面的代码是判断一个字符串的内容是否以某个单词开头,这里可以使用系统的startWith(xxx)函数,我们利用infix函数将其改造成beginWith,使用起来就变成了"Hello World" beginWith "Hello" 的形式了,是不是很简单。

注意:infix函数虽然好用,但是也有限制,首先就是 infix函数不能定义成顶层函数,它必须是某个类的成员函数,可以使用扩展函数的方式将它定义到某个类当中。 infix函数必须接收且只能接收一个参数至于参数类型是没有限制的。

至此,关于infix函数的相关知识就介绍完了,赶紧学起来优化代码的可读性吧。

相关推荐
Kapaseker17 小时前
一杯美式搞定 Kotlin 空安全
android·kotlin
FunnySaltyFish1 天前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
Kapaseker2 天前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
Kapaseker3 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
A0微声z5 天前
Kotlin Multiplatform (KMP) 中使用 Protobuf
kotlin
alexhilton5 天前
使用FunctionGemma进行设备端函数调用
android·kotlin·android jetpack
lhDream5 天前
Kotlin 开发者必看!JetBrains 开源 LLM 框架 Koog 快速上手指南(含示例)
kotlin
RdoZam5 天前
Android-封装基类Activity\Fragment,从0到1记录
android·kotlin
Kapaseker6 天前
研究表明,开发者对Kotlin集合的了解不到 20%
android·kotlin
糖猫猫cc6 天前
Kite:两种方式实现动态表名
java·kotlin·orm·kite