Kotlin Reference: Destructuring Declarations
有时候需要把一个对象解构(Destructure)为一系列变量,如: [code lang=”kotlin”]val (name, age) = person[/code] 上面的语法称为解构声明(Destructuring Declaration),解构声明可以一次性创建多个变量。我们声明了两个变量:name 和 age,可以单独地使用它们: [code lang=&…
Read more
learn, build, evaluate
有时候需要把一个对象解构(Destructure)为一系列变量,如: [code lang=”kotlin”]val (name, age) = person[/code] 上面的语法称为解构声明(Destructuring Declaration),解构声明可以一次性创建多个变量。我们声明了两个变量:name 和 age,可以单独地使用它们: [code lang=&…
Read more
使用高阶函数会引入一定的运行时损耗:每一个函数都是一个对象,并且要获取闭包,即在函数内访问外部函数作用域的变量。(对函数对象和类的)内存分配和虚调用都会引入运行时开销。 但在很多情况下,使用内联 Lambda 表达式可以消除此种开销,下面给出的函数很好地展现了这一情况,即 lock() 函数可以很容易地在调用处内联,考虑下面的场景: [code lang=”kotlinR…
Read more
Higher-Order Functions 高阶函数指的是以函数作为参数或返回值的函数。lock() 函数是一个很好的例子,它接受一个对象和一个函数作为参数,获取对象的锁后,执行函数并释放锁: [code lang=”kotlin”]fun lock(lock: Lock, body: () -> T): T { lock.lock() try { return bo…
Read more
Function Declarations 在 Kotlin 中使用 fun 关键字定义函数: [code lang=”kotlin”]fun double(x: Int): Int { return 2*x }[/code] Function Usage 函数的调用和传统方法一样: [code lang=”kotlin”]val resul…
Read more
对于一些通用的属性,比起每次都在需要的时候进行手动实现,更好的方法是实现一次并把它放进库里,此类属性如: 延迟(Lazy)属性:仅在第一次访问时进行计算, 可观察(Observable)属性:属性发生变动时通知监听者, 在映射(Map)中存储属性,而不是把属性存储到单独的字段。 Kotlin 提供了委托属性(Delegated Property)来满足此种(及其他)场景: [code la…
Read more
实践证明,委托模式(Delegation Pattern)是实现继承的一种有效的替代方式,Kotlin 原生支持委托模式,不需要任何样板代码。下面的代码中,Derived 类实现了接口 Base,并将其所有的公有方法委托给了一个特定的对象: [code lang=”kotlin”]interface Base { fun print() } class BaseImpl…
Read more
有时候我们想对一个类进行些许修改,而又不想显式地声明一个新的子类。Java 使用匿名内部类(Anonymous Inner Class)的方式应对这种场景,Kotlin 使用对象表达式(Object Expression)和对象声明(Object Declaration)进一步拓展了这个概念。 Object expressions 要创建继承了某个(或多个)其他类型的匿名内部类,可以使用如…
Read more
枚举类最基础的应用是实现类型安全的枚举: [code lang=”kotlin”]enum class Direction { NORTH, SOUTH, WEST, EAST }[/code] 每一个枚举常量都是一个对象,每个枚举常量之间以逗号分隔。 1. Initialization 由于每一个枚举都是枚举类的实例,故而它们可以被初始化: [code lang=…
Read more
类可以嵌套进其他的类中: [code lang=”kotlin”]class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2[/code] 【注】Kotlin 的嵌套类默认不携带外部类的引用,相当于 Java…
Read more
Kotlin 的类可以具有类型参数,就像 Java 一样: [code lang=”kotlin”]class Box(t: T) { var value = t }[/code] 一般来说,要创建这种类的实例,需要提供类型参数: [code lang=”kotlin”]val box: Box = Box(1)[/code] 但如果类型…
Read more