前言
Kotlin ——一种为现代多平台应用而诞生的静态编程语言
Kotlin 是由 JetBrains 开发的一个基于 JVM(Java虚拟机) 的新的编程语言。
Kotlin文件可以编译成Java的字节码,也可以编译成JavaScript,这样就很方便那些没有安装JVM的设备运行。
Kotlin兼容Java,相比于Java而言,它有很多优点,待会笔者会就几个写一下,并给出实际例子。
Kotlin文件以”.kt”作为拓展名,这是Kotlin的官方参考文档。
在这笔者顺便打个广告
广告内容
腾讯课堂《跟鹅厂老司机学新技术》系列课程第一课 “遇见Kotlin” 将于今晚8点半开始啦
本期的主题为如何学习Kotlin和分享一些学习Kotlin过程的小技巧 ,欢迎各位开发者和小伙伴们前来围观哦
笔者是已经准备好凳子了的:) YingJoy
这是课程地址,还没报名的小伙伴们赶紧了!
广告结束。好了,现在开始正文
优点1. 与Java语言的互通性
Kotlin与Java100%互通,不通你打死我
你可以用Kotlin继续你的Java项目
所有你熟悉的Java框架仍可用。
任何框架,不管是 Kotlin 写的,还是你Java写的都可以。
Demo:
Kotlin调用Java
1 | Java文件: |
Java调用Kotlin
1 | Kotlin文件: |
优点2. 与Java语言的相似
这里可以看官方的文档
Demo
1 | class Foo { |
在这里可以看到,Kotlin的每行代码结尾是可以不加“;”的,加了也没问题
优点2. 对字符串的操作
这里拿对字符串的插值来说
Demo
1 | val x = 1 |
在这里来说,Kotlin相当于有一个比Java中的字符串格式化函数(String.format())更加优秀的字符串函数
优点3. 类型判断与自动转换
Kotlin会根据代码逻辑对变量的类型进行推断
还会进行自动的类型转换
自动类型转换提高了代码的可读性,因为没有自动转换的话,需要人工进行转换,还会有很多instanceof进行检查
这里是官方文档
Demo
1 | val a = "abc" // String |
优点4. 直观的相等比较
在Kotlin中不像Java调用equals()函数那么麻烦。
它可以直接对字符串进行比较
Demo
1 | val y1 = Person("Ying") |
参照相等: ===: 就是判断a, b是否为同一对象。也可以使用内联函数identityEquals() 判断参照相等。
结构相等: ==: 判断的。a, b的值是不是一样的,相当于y1.equals(y2)。
优点5. 默认参数 和 命名参数
不再使用不同的参数来定义类似的构造器:
结合默认参数值,命名参数可以消除 builders 的使用:
Demo
1 | fun build(title: String, width: Int = 800, height: Int = 600) { |
优点6. switch->When
switch 替换成了 when ,代码更具可读性:
Demo
1 | when (x) { |
下面的case既可为表达式,也可用作语句,也可作用于null:
1 | val res: Boolean = when { |
优点7. 属性的getter和setter
直接在属性后面就可以生成getter和setter
Demo
1 | class Frame { |
优点8. Data类
Data类这是一个POJO(Plain Ordinary Java Object)简单的Java对象,其中包含toString(),equals(),hashCode()和copy()等方法,与Java不同,它占用的代码量少了很多
Demo
1 | data class Person(val name: String, |
优点9. 操作符重载
重载操作符提高代码可读性
Demo
1 | data class Vec(val x: Float, val y: Float) { |
优点10. 解构
一些对象可以被解构,如对Map进行迭代
Demo
1 | for ((key, value) in map) { |
优点11. 变量范围
为了程序可读性而诞生
Demo
1 | for (i in 1..100) { ... } |
优点12. 扩展函数
向已有的类里添加新的函数
这是官方文档
Demo
1 | fun String.replaceSpaces(): String { |
这样就拓展了原来的String类
1 | str.removeSuffix(".txt") |
优点13. null安全机制
Java是一个几乎静态类型的编程语言。Java的String变量类型在一些情况下会等于null,导致程序猿总是要担心NullPointerException。
Kotlin的类型默认是不允许为空的,但是可以通过在后面加一个(?)问号来表示允许为空,例如:
1 | var a: String = "abc" |
当你访问一个可能为空类型的时候,Kotlin会编译报错,除非加上一个检查机制
如:
1 | val x = b.length // 编译报错: b可能为null |
也可以使用安全调用(?),这样该表达式在 b 为空时返回null,而不是抛出空指针异常:
1 | val x = b?.length // x为可空的Int型 |
安全调用(?)问号可以进行套用,以避免像其他语言一样存在大量嵌套的if-not-null检查。
如果我们想要一个非null外的默认值,可以用 “?:”操作符
1 | val name = ship?.captain?.name ?: "unknown" |
如果上面你不想用的话,你刚刚又有不明确的要求,那只有抛出异常
1 | val x = b?.length ?: throw NullPointerException() |
优点14. 更好的 Lambdas
语法简单直接,如:
1 | val sum = { x: Int, y: Int -> x + y } // 相当于 sum = {(Int, Int) -> Int} |
Kotlin的Lambdas表达式优点体现在:
如果lambda表达式是方法的最后一个参数或者是唯一参数的话,那么该方法的括号可以移动或者省略.
如果我们选择不去声明单参数的lambda表达式的参数,那么Kotlin会隐式的将其命名为it.
所以说,下面的代码效果是一样的:
1 | numbers.filter({ x -> x.isPrime() }) |
还可以让你的代码更漂亮
如:
1 | persons |
好了,上述就是笔者要说的一些优点,当然还有很多优点或一些确定是没说的,这就等着我们明晚和鹅厂的dalao们一起探讨吧!