基于java,所以很多语法与java类似,从java切换到kotlin基本不需要成本。
编程语言:JVM, Android和Browser
在线尝试: https://try.kotlinlang.org
JB IDEA里的REPL 命令行交互
细节
1. val var 不需要具体的类型声明,如果使用代表可以强制类型转换; 区别 val = final
2. 没有NPE, https://en.wikipedia.org/wiki/Tony_Hoare Apologies and retractions
var a1 = null (wrong); var a2? = null (ok); a2.length (wrong); a2?.length (ok, return null)
3. if (a) {} else {}
4. when(mode) { 1-> aaa; 2 -> bbb; else -> ss} var a = when(mode) { express -> println("abc"); "Abc" } 执行并返回
5. val a = arrayListOf("abc") vs var/val a = listOf("abc")/arrayList() 区别
6. val a = arrrayListOf(); a.size; a[0], isEmpty(), contains(), subList(), add(), remove()
7. for loop:
for(i in 1..100) {//}
for(i in list) {}
for( (index, value) in list.withIndex()) {
println("Element at $index value $value");
}
for(c in "wiseking") { print(c)} //each char
outter@ for() {
if(st)
break@outter
}
for(i in list.size -1 downTo 0) {}
8. fun
fun getDate() : Date { return Date()}
fun getBirth() :Int {
return 2018 - age
}
等价于 fun getBirth() = 2018 - age
9. OO
class Person(name:String, age:Int = 10) {
var name : String
init() {
//construct
this.name = name
}
}
var a = Persion(age=10, name="wk") (OK)
var a = Persion("wk") (OK)
9.1. 继承 open override
9.2. 抽象类 abstract override
9.3. 接口 override
9.4. super this; super
9.5. data 类
9.6. dataBook赋值给多个变量, 两个属性相同的data对象等价
9.7. 单例 object Abc {}
9.8 枚举
10. package import 与java相同 a. 不需要static import; b. 可以直接引用java包
11. setter和getter field == this.age
12. 隐藏 可以使用 private protected internal
13. Stack实现的例子 DRY 可变长参数修饰 vararg
14. 泛型 stackOf, *elements
领取专属 10元无门槛券
私享最新 技术干货