WHS GIS Engineer

Kotlin 从入门到放弃

2017-05-30
WHS

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版本一致
}

Comments