美文网首页
Kotlin 区间 原理

Kotlin 区间 原理

作者: 莫库施勒 | 来源:发表于2019-05-23 11:54 被阅读0次

直接上代码, 我们以下面的例子说明

for (i in 4 downTo 1 step 2) print(i) // 输出“42”
// downTo 定义
public infix fun Int.downTo(to: Int): IntProgression {
    return IntProgression.fromClosedRange(this, to, -1)
}

// until 定义
public infix fun Int.until(to: Int): IntRange {
    if (to <= Int.MIN_VALUE) return IntRange.EMPTY
    return this .. (to - 1).toInt()  // 此处可以看出 .. 与 until 的区别
}
// LongRange 定义
public class LongRange(start: Long, endInclusive: Long) : LongProgression(start, endInclusive, 1), ClosedRange<Long> {
    override val start: Long get() = first
    override val endInclusive: Long get() = last

    override fun contains(value: Long): Boolean = first <= value && value <= last

    override fun isEmpty(): Boolean = first > last

    override fun equals(other: Any?): Boolean =
        other is LongRange && (isEmpty() && other.isEmpty() ||
        first == other.first && last == other.last)

    override fun hashCode(): Int =
        if (isEmpty()) -1 else (31 * (first xor (first ushr 32)) + (last xor (last ushr 32))).toInt()

    override fun toString(): String = "$first..$last"

    companion object {
        /** An empty range of values of type Long. */
        public val EMPTY: LongRange = LongRange(1, 0)
    }
}

// LongProgression 定义
 public open class LongProgression
    internal constructor
    (
            start: Long,
            endInclusive: Long,
            step: Long
    ) : Iterable<Long> {... }

// ClosedRange 定义
public interface ClosedRange<T: Comparable<T>> {
    /**
     * The minimum value in the range.
     */
    public val start: T

    /**
     * The maximum value in the range (inclusive).
     */
    public val endInclusive: T

    /**
     * Checks whether the specified [value] belongs to the range.
     */
    public operator fun contains(value: T): Boolean = value >= start && value <= endInclusive

    /**
     * Checks whether the range is empty.
     */
    public fun isEmpty(): Boolean = start > endInclusive
}
public infix fun IntProgression.step(step: Int): IntProgression {
    checkStepIsPositive(step > 0, step)
    return IntProgression.fromClosedRange(first, last, if (this.step > 0) step else -step)
}

其中 infix 表示中缀表示法, operator 表示 重载操作符的函数

infix fun Int.shl(x: Int): Int { …… }

// 用中缀表示法调用该函数
1 shl 2

// 等同于这样
1.shl(2)

相关文章

  • Kotlin 区间 原理

    直接上代码, 我们以下面的例子说明 其中 infix 表示中缀表示法, operator 表示 重载操作符的函数

  • 19. when表达式

    1.正常使用 2.when加强 相比java,区间更加方便 3.kotlin中when表达式原理 可以看到编译后的...

  • Kotlin区间

    区间的创建 通过 .. 创建闭区间,包含起止值 通过 until 关键字创建前开后闭的区间,包含开始值,不包含结束...

  • kotlin入门(4)-区间

    Kotlin入门(1)-环境配置kotlin入门(2)-基本类型kotlin入门(3)-数组 区间从数学意义上定义...

  • kotlin基础(二)

    kotlin控制语句 if else 语句 使用区间 使用 in 运算符来检测某个数字是否在指定区间内. Whe...

  • 数学分析理论基础2:数集与确界原理

    数集与确界原理 区间与邻域 区间 邻域 有界集与确界原理 有界集 上界与下界定义: 有界集定义: 注:任何有限区间...

  • 精讲-第5章(18)区间、数组、集合之间转换

    区间、数组、集合之间转换 在Kotlin中区间、数组、集合都是描述一系列元素的集合。通过上面的学习,我们看到它们有...

  • 6. 区间

    区间 一个数学上的概念,表示范围 Kotlin中的区间在Java中是没有的 由操作符..(rangeTo函数),i...

  • Kotlin修仙之旅:函数,Lambda表达式,常量,变量

    上一篇文章主要总结了一些Kotlin的基础知识,包括类,对象,数组,区间等(Kotlin基础知识(二)类,对象,数...

  • MATLAB数值分析之数值积分(一)

    【实验原理】 一、复合辛普森方法 1)复合辛普森方法基本思路 把积分区间分成若干子区间,再在每个子区间上用低阶辛普...

网友评论

      本文标题:Kotlin 区间 原理

      本文链接:https://www.haomeiwen.com/subject/mgjvzqtx.html