Kotlin学习之旅(D8)-From Java to Kotlin
Kotlin学习之旅第八天
今天的主题是:From Java to Kotlin
前言
Kotlin学习之旅(D6)-Kotlin Idioms part 1
Kotlin学习之旅(D7)-Kotlin Idioms part 2
学习资源
Kotlin官网在线学习课程(需要*):Kotlin Koans
kotlin中文(不需要*):Kotlin语言中文站
Github学习资源 : From Java To Kotlin
kotlin必备知识:
- Learn Kotlin - lateinit vs lazy
- Learn Kotlin - apply vs with
- Learn Kotlin - Data Class
- Learn Kotlin - Destructuring Declarations
- Learn Kotlin - Extension Functions
- Learn Kotlin - Sealed Classes
首先如果是有Java基础的童鞋,推荐直接从官网文档上手,可以快速学习Kotlin这门语言的特性和用法。
如果是零基础的童鞋,那么推荐看视频+看书,一般都是直接在youtube上搜索kotlin就可以找到很有有用的视频了,书籍的话推荐《Kotlin in Action》
这两天的任务比较轻松,因为From Java to Kotlin 其实在前面我们讲语法和习惯用法的时候,基本上都已经见过了,这里其实只是相当于再复习一遍,而且上面的 From Java To Kotlin已经很全了,我就把自己不太熟练的摘录下来。
常见区别
Null
Java
if(text != null){
int length = text.length();
}
Kotlin
val length = text?.length
val length = text!!.length // NullPointerException if text == null
?:可以为空,但是如果没做非空判断,在编译的时候会报错
!!.:可以为空,编译的时候也不会报错,但是运行的时候有可能会NPE
Strings II
Java
String text = "First Line\n" +
"Second Line\n" +
"Third Line";
Kotlin
val text = """
|First Line
|Second Line
|Third Line
""".trimMargin()
Kotlin里面通过 '''
来表示多行字符串,通过 |
来表示换行
Bits Operations
Java
final int andResult = a & b;
final int orResult = a | b;
final int xorResult = a ^ b;
final int rightShift = a >> 2;
final int leftShift = a << 2;
Kotlin
val andResult = a and b
val orResult = a or b
val xorResult = a xor b
val rightShift = a shr 2
val leftShift = a shl 2
Java 和 Kotlin 的位操作符
Collections
Java
for (int number : numbers) {
System.out.println(number);
}
for (int number : numbers) {
if(number > 5) {
System.out.println(number);
}
}
Kotlin
numbers.forEach {
println(it)
}
numbers.filter { it > 5 }
.forEach { println(it) }
Kotlin通过 filter{x > 5}
来表示 Java里面的 if(x > 5)
这个条件语句的区别需要注意
Constructors
Java
public class Utils {
private Utils() {
// This utility class is not publicly instantiable
}
public static int getScore(int value) {
return 2 * value;
}
}
Kotlin
class Utils private constructor() {
companion object {
fun getScore(value: Int): Int {
return 2 * value
}
}
}
// another way
object Utils {
fun getScore(value: Int): Int {
return 2 * value
}
}
Java:通过 静态方法 来实现工具类
Kotlin:一切皆是对象,通过 companion object / ojbect utils 来实现工具类
Class methods
Java
public class Utils {
private Utils() {
// This utility class is not publicly instantiable
}
public static int triple(int value) {
return 3 * value;
}
}
int result = Utils.triple(3);
Kotlin
fun Int.triple(): Int {
return this * 3
}
var result = 3.triple()
Java:通过static实现类方法
Kotlin:通过扩展函数实现类方法
enum
Java
public enum Direction {
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);
int direction;
Direction(int direction) {
this.direction = direction;
}
public int getDirection() {
return direction;
}
}
Kotlin
enum class Direction constructor(direction: Int) {
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);
var direction: Int = 0
private set
init {
this.direction = direction
}
}
总结
一开始以为From Java to Kotlin 要讲两天的,因为我是先大致浏览了一遍官方文档,然后做的学习计划,结果发现经过前面的学习,对Kotlin的语法掌握了的情况下,其实很多Java和kotlin之间的区别都已经很熟悉了,强烈推荐大家去看看 From Java To Kotlin,就当是一个复习/总结,加深对Kotlin语法的熟悉。
明天开始正式进入Kotlin in Android 的学习,这个才是我们Kotlin学习之旅的重点。
Day 8 - Learn Kotlin Trip, Completed.