- 函数的几种写法:
表达式函数体fun max(a: Int, b: Int): Int { return if (a > b) a else b }
省略掉返回值类型fun max(a: Int, b: Int): Int = if (a > b) a else b
fun max(a: Int, b: Int) = if (a > b) a else b
- val变量只能进行唯一一次初始化
- val引用自身是不可变的,但是它指向的对象可能是可变的
- 自定义访问器
class Rectangle(val height: Int, val width: Int) { val isSquare: Boolean get() { return height == width } }
- kotlin不区分导入的是类还是函数,而且,它允许使用import关键字导入任何种类的声明。可以直接导入顶层函数的名称。
- when能使用任何表达式作为分支条件
- 如果没有给when表达式提供任何参数,条件分支就是任意的布尔表达式。
- kotlin中,如果你检查了一个变量是某种类型,后面就不再需要转换它 。
- kotlin中使用as关键字来表示到特定类型的显式转换
val n = e as Num
- kotlin中的while循环跟Java相同
- for循环仅有一种形式
1..10 // [1, 10] 1 until [1, 10) 10 downTo 1 step 2 // 10 8 6 4 2
- 迭代Map
val binaryReps = TreeMap<Char, String>() for (c in 'A'..'F') { val binary = Integer.toBinaryString(c.toInt()) binaryReps[c] = binary } for ((letter, binary) in binaryReps) { println("$letter = $binary") }
- 在迭代中同时跟踪当前项的下标。
val list = arrayListOf("10", "11", "1001") for ((index, element) in list.withIndex()) println("$index: $element")
- 用in来检查集合和区间的成员
- 在Java中,受检异常必须显式处理,必须声明你的函数能抛出的所有受检异常,如果调用另一个函数,需要处理这个函数的受检异常,或者声明你的函数也能抛出这些异常。Kotlin并不区分受检异常和未受检异常,不用指定函数抛出的异常,而且可以处理也可以不处理异常。
- Kotlin中声明集合
val set = hashSetOf(1, 7, 53) val list = arrayListOf(1, 7, 53) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")
- kotlin中可以显式标明一些参数的名称
- kotlin可以在声明函数的时候,指定参数的默认值,这样就可以避免创建重载的函数。
fun <T> joinToString(c: Collection<T>, sep: String = ", ", prefix: String = "", postfix: String = ""): String
- kotlin中,只要可以编译为Java类,你就可以为这个类添加自己的扩展。
fun String.lastChar(): Char = get(length - 1)
- 如果一个类的成员函数和扩展函数有相同的签名,成员函数往往会被优先使用。
- 扩展属性
val String.lastChar: Char get() = get(length - 1)
- 三重引号不需要转义
- kotlin支持局部函数,并且扩展函数也可以被声明到局部函数当中。