kotlin基础

本文介绍了Kotlin中的infix函数,如何通过它将编程语法调整为更接近自然语言的形式,如`beginsWith()`和`has()`函数的应用,以及如何使用泛型和mapOf()函数构建键值对。
摘要由CSDN通过智能技术生成

七、infix函数
使用infix函数构建更可读的语法
mapOf()函数,使用A to B的语法结构,to并不是Kotlin的关键字,之所以可以使用这种语法结构,是因为Kotlin提供了一种高级语法糖特性:infix函数,其实就是把编程语言函数调用的语法规则调整了一下,比如A to B这样的写法,实际上等价于A.to(B)的写法。
String类中有一个StartsWith()函数,它可以用于判断一个字符串是否是以某个指定的参数开头的。

if("hello Kotlin".startsWith("Hello")) {
            //处理具体的逻辑
        }
1
2
3
借助infix函数,我们可以使用一种更具可读性的语法来表达这段代码。新建一个infix.kt文件,编写一下代码

infix fun String.beginsWith(prefix: String) = startsWith(prefix)
1
加上infix关键字后,beginsWith()函数就变成了一个infix函数,这样除了传统的函数调用方式之外,还可以用一种特殊的语法糖格式调用beginsWith()函数

if("Hello Kotlin" beginsWith "Hello") {
        //处理具体逻辑
    }
1
2
3
infix函数允许我们将函数的小数点、括号等计算机相关的语法去掉,使用一种更接近英语的语法来编写程序,让代码更具可读性。
infix函数有两个比较严格的限制:infix函数是不能定义成顶层函数的,它必须是某个类的成员函数,可以使用扩展函数的方式将它定义到某个类当中;infix函数必须接收且只能接收一个参数。
一个集合,想要判断集合中是否包括某个指定元素,一般这样写

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
    if(list.contains("Banana")) {
        //处理具体逻辑
    }
1
2
3
4
在infix.kt文件中添加如下代码

infix fun <T> Collection<T>.has(element: T) = contains(element)
1
我们给Collection接口添加了一个扩展函数,因为Collection是Java和Kotlin所有集合的总接口,因此给Collection添加一个has()函数,那么所有集合的子类就都可以使用这个函数了。
这里使用了泛型函数的定义方法,这样has()函数可以接收任意具体类型的参数。
于是判断集合中是否包括某个指定的元素可以改成

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
    if(list has "Banana") {
        //处理具体逻辑
    }
1
2
3
4
mapOf()函数中允许我们使用A to B这样的语法来构建键值对,to()函数源码

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
1
这里使用泛型函数的定义方式将to()函数定义到A类型下,并且接收一个B类型的参数。因此A和B可以是两种不同类型的泛型,也就可以构建出字符串to整型这样的键值对。
to()函数的实现,创建并返回了一个Pair对象,而mapOf()函数实际上接收的正是一个Pair类型的可变参数列表。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/bp1907/article/details/122333471

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值