Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言,其名称来自于圣彼得堡附近的科特林岛。[3]2012年1月,著名期刊《Dr. Dobb’s Journal》中Kotlin被认定为该月的最佳语言。[4]虽然与Java语法并不兼容,但Kotlin被设计成可以和Java代码相互运作,并可以重复使用如Java集合框架等的现有Java类库。Hathibelagal写道,“如果你正在为Android开发寻找一种替代编程语言,那么应该试下Kotlin。它很容易在Android项目中替代Java或者同Java一起使用。”
Kotlin很明显受到Java、C#、JavaScript、Scala、Groovy等语言的影响。例如Kotlin可以直接通过println(“Hello, {name}”)或println(“Hello, $name”)来使用字符串模板,和古老的shell script类似。又如Kotlin中的分号是可选的,这类似JavaScript,而且Groovy、Scala也有同样的能力。Kotlin常量定义关键字是val(不同于变量定义关键字var),表示固定值,这功能来自Scala,Swift也有类似功能。
需要注意,Kotlin没有关键字new。
目前使用kotlin的公司和组织
华米科技 Airbnb
优点
-
简洁
-
安全
var output: String
output = null // Compilation error
val name: String? = null // Nullable type
println(name.length()) // Compilation error
fun calculateTotal(obj: Any) {
if (obj is Invoice)
obj.calculateTotal()
}
-
互操作
-
工具友好
缺点
-
编译速度
-
社区发展
基本语法(与Java比较)
常量和变量
- Java
String name = "Amit Shekhar";
final String name = "Amit Shekhar";
- Kotlin
val a: Int = 1 // 定義a為`Int`類型的變量,其值為1
val b = 2 // 自動檢測b為`Int`類型
var x = 5 // App 定義一個`Int`,值為5
x = 1 // 修改值為1
空判断
- Java
if (text != null) {
int length = text.length();
}
- Kotlin
val length = text?.length
for循环
- Java
for (int i = 1; i <= 10 ; i++) { }
for (int i = 1; i < 10 ; i++) { }
for (int i = 10; i >= 0 ; i--) { }
for (int i = 1; i <= 10 ; i+=2) { }
for (int i = 10; i >= 0 ; i-=2) { }
for (String item : collection) { }
for (Map.Entry<String, String> entry: map.entrySet()) { }
- Kotlin
for (i in 1..10) { }
for (i in 1 until 10) { }
for (i in 10 downTo 0) { }
for (i in 1..10 step 2) { }
for (i in 10 downTo 0 step 2) { }
for (item in collection) { }
for ((key, value) in map) { }
更灵活的case语句
- Java
int score = // some score; String grade; switch (score) { case 10: case 9: grade = "Excellent"; break; case 8: case 7: case 6: grade = "Good"; break; case 5: case 4: grade = "OK"; break; case 3: case 2: case 1: grade = "Fail"; break; default: grade = "Fail"; }
- Kotlin
var score = // some score var grade = when (score) { 9, 10 -> "Excellent" in 6..8 -> "Good" 4, 5 -> "OK" in 1..3 -> "Fail" else -> "Fail" }
带返回值的方法
- Java
int getScore() {
// logic here
return score;
}
int getScore(int value) {
// logic here
return 2 * value;
}
- Kotlin
fun getScore(): Int {
// logic here
return score
}
// as a single-expression function
fun getScore(): Int = score
fun getScore(value: Int): Int = 2 * value
未来的发展
- Kotlin / Native目前正在开发
- 跨平台发展,支持Mac、ios、web开发
- 游戏开发
- 科学计算
参考资料
遇到的问题
问题描述
kotlin与Databinding冲突
解决办法 需要在app moudle的build.gradle里面添加
kapt {
generateStubs = true
}
dependencies {
kapt 'com.android.databinding:compiler:2.2.3'//与Gradle版本一致
}