Kotlin基础07

// Checking if value of comparable is in range. Optimized for nu
mber primitives.
if (i in 1..10 ) println(i)
if (x in 1.0 . .3.0 ) println(x)
if (str in "island" .. "isle" ) println(str)
// Iterating over arithmetical progression of numbers. Optimized
for number primitives (as indexed for-loop in Java).
for (i in 1..4 ) print(i) // prints "1234"
for (i in 4..1 ) print(i) // prints nothing
for (i in 4 downTo 1 ) print(i) // prints "4321"
for (i in 1..4 step 2 ) print(i) // prints "13"
for (i in ( 1..4 ).reversed()) print(i) // prints "4321"
for (i in ( 1..4 ).reversed() step 2 ) print(i) // prints "42"
for (i in 4 downTo 1 step 2 ) print(i) // prints "42"
for (x in 1.0 . .2.0 ) print( "$x " ) // prints "1.0 2.0 "
for (x in 1.0 . .2.0 step 0.3 ) print( "$x " ) // prints "1.0 1.3 1.6
1.9 "
for (x in 2.0 downTo 1.0 step 0.3 ) print( "$x " ) // prints "2.0 1
.7 1.4 1.1 "
for (str in "island" .. "isle" ) println(str) // error: string
常见的接口的定义
有俩种基本接口: Range Progression
136 Ranges
Range 接口定义了一个范围,或者是数学意义上的一个间隔。
interface Range<T : Comparable<T>> {
val start : T
val end : T
fun contains (Element : T) : Boolean
}
Progression 定义了数学上的级数。包括 start end increment 端点。最大的特点
就是它可以迭代,因此它是 Iterable 的子类。 end 不是必须的。
interface Progression<N : Number> : Iterable<N> {
val start : N
val end : N
val increment : Number
}
java for 循环类似:
// if increment > 0
for (int i = start; i <= end; i += increment) {
// ...
}
// if increment < 0
for (int i = start; i >= end; i += increment) {
// ...
}
类的实现
为避免不需要的重复,让我们先考虑一个数字类型 Int 。其它的数字类型也一
样。注意这些类的实例需要用相应的构造函数来创建,使用 rangeTo() downTo()
reversed() stop() 实用函数。
IntProgression 类很直接也很简单:
137 Ranges
class IntProgression ( override val start : Int , override val end :
Int , override val increment : Int ): Progression<Int> {
override fun iterator () : Iterator<Int> = IntProgressionItera
torImpl (start, end, increment)
}
IntRange 有些狡猾:它实现了 Progression<Int> Range<Int> 接口,因
为它天生以通过 range 迭代 ( 默认增加值是 1 )
class IntRange ( override val start : Int , override val end : Int ):
Range<Int>, Progression<Int> {
override val increment : Int
get () = 1
override fun contains (element: Int) : Boolean = start <= elemen
t && element <= end
override fun iterator(): Iterator<Int> = IntProgressionIterato
rImpl (start, end, increment)
}
ComparableRange 也很简单:
class ComparableRange <T : Comparable<T>>( override val start : T,
override val end : T): Range<T> {
override fun contains (element: T) : Boolean = start <= element
&& element <= end
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值