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)的写法。

 val myMap = mapOf("key" to "value")

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

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函数的相关知识就介绍完了,赶紧学起来优化代码的可读性吧。

猜你喜欢

转载自blog.csdn.net/zxj2589/article/details/132796190
今日推荐