冰鉴的博客

夫唯不争,故天下莫能与之争

Kotlin系列之in运算符

今天我们聊聊Kotlin中的in运算符。

其实我们上一节也看到了in的身影,那里它是用来迭代集合或者map的,我们这里说说in的其他用处。

in用于检查区间内的成员

in运算符常常用来检查一个值是否在某个区间内。它还有对应的逆运算!in用来检查某个值不在某一个区间内。

我们写一个函数,用来检测一个字符是否是英文字母

Kotlin代码

fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'

虽然代码只有一行,但却包含了我们前面说过的多个知识点。
1. 这里用到了表达式函数体。
2. 这里用到了区间('a'..'z')。
3. 这里得益于类型推导让我们可以省略函数返回值的显式书写。

那我们再照猫画虎写一个判断一个字符不是数字的函数。
Kotlin代码

fun isNotDigit(c: Char) = c !in '0'..'z'

in与when的组合使用

前面我们也说过了when关键字,这里我们用in检查作为when的分支,可能说的有点抽象,这里上代码。

Kotlin代码

fun recog(c: Char) = when(c){
    in '0'..'9' -> "It's a digit"
    in 'a'..'z', in 'A'..'Z' -> "It's a letter"
    else -> "don't know..."
}

这里通过对传入的c进行in操作符的判断,一旦c在对应的区间内,则返回对应的字符串,如果都不在则返回”don’t know…”。

in用于其它类型的区间

前面我们只了解到字符区间,也知道之所以可以写'a'..'z'这样的字符区间是由于ASCII码,更进一步说,是因为ASCII码的存在让它们是可比较的,那有没有其它区间形式呢?
答案当然是有哇。对于任意的实现了java.lang.Comparable接口的的类(换句话说这个类的实例支持比较操作),那么就能创建这种类型的对象的区间。

比如,String类实现了Comparable接口,内部是按字母表的顺序进行比较的,那我们就可以创建两个字符串的一个区间,比如

println("Kotlin" in "Java".."Scala")

输出为true,原因在于按照字母序,只比较第一位K位于JS之间。
当然,in还有一个常见的用途,用于判断一个集合是不是包含了某个值。

println("Kotlin" in setOf<String>("Java", "Scala"))

这种用法类似于Java中的contains()方法,都是判断某个值是否包含在一个集合中。

写在最后

这一节只讨论了in操作符的一些用法,更深层次的用法将在后续推出。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingjianIT/article/details/79090877
文章标签: kotlin
个人分类: Kotlin
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Kotlin系列之in运算符

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭