共计 3169 个字符,预计需要花费 8 分钟才能阅读完成。
用 Java 开发了很多年,因为工作的需要学习 Kotlin。初识 Kotlin 时是各种不习惯,觉得这个语言相对于 Java 而言并不够严谨。随着不断的深入,最终还是逃不过 ” 真香定理 ”。我一直认为普通的技术使用者是没有太多的权利去评论一门技术语言的好坏。很多人只了解皮毛就开始对它进行过分的评论。所以大家不要被网上的一些信息所左右(像我这样单纯的程序员好像不多了)。如果你有 Java 基础,上手 Kotlin 是非常的快,而且还会让你爱不释手。
Hello World
国际惯例,我们分别用 Java 和 Kotlin 实现打印 hello world 的功能。通过比较两者的区别,开启 Kotlin 大门。
先是熟悉的 Java 代码:
第一步:创建 java 文件,并定义一个 HelloWorld 类,
第二步:创建类的入口函数 main 方法,在 main 函数中执行输出语句。
package com.java.helloworld;
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");
}
}
接一下是陌生的 Kotlin 代码:
第一步:创建 kt 文件,
第二步:创建入口函数 main 方法,在 main 函数中执行输出语句。
package com.kotlin.helloworld
fun main(args: Array<String>) {println("Hello World")
}
看到这部分代码,你一定会奇怪
Kotlin 不需要定义 class 类就可以执行 main 方法?是的,当然也可以做到先定义类,然后在类中创建 main 函数。
Kotlin 是通过 fun 关键字定义一个函数?
Kotlin 的 main 函数为什么没有 public static void 等关键字?
Kotlin 的变量名怎么在变量类型的前面?
Kotlin 的输出语句看起来好简单!!!没错,这些都是 Kotlin 的语法特点。先混个脸熟!
Kotlin 简介
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言。并且 Google 已经宣布 Kotlin 成为 Android 官方开发语言。但这并不意味着 Kotlin 只能做 Android 开发。Java 能做到的,Kotlin 基本都可以做到。而且比 Java 更简单,更简洁,更实用。Kotlin 还提供了大量的函数帮助我们快速开发,同时也挖了很多坑等着我们跳。
用 Kotlin 以后发现自己变笨了点!大家有没有这样的感觉呢?
Kotlin 变量
在 Java 中,声明一个变量,必须要先规定变量的类型,然后才是变量的名称。与之相反,Kotlin 是先定义变量名称,最后才是变量类型。Kotlin 甚至可以省略变量类型,通过编译器智能推断出变量的类型。这也是变量类型写在后面的好处。
还是老规矩,我们分别用 Java 和 Kotlin 变量定义。通过比较两者的区别,进一步了解 Kotlin。
列举了一些 Java 常见的基本数据类型和用法,定义变量的格式:[修饰符] + 变量类型 + 变量名称
public class Variable {public static void main(String[] args) {
byte b = 0;
short s = 0;
int i = 0;
long l = 0L;
float f = 0.0f;
double d = 0.0;
boolean bl = true;
char c = 'c';
}
}
习惯用 Java 的朋友在使用 Kotlin 中最大的不适应的地方就是变量。因为声明变量的代码是常有的,而且两者的语法格式恰恰相反。Kotlin 通过关键字 val 和 var 定义变量,然后接变量名和变量类型。格式:val/var + 变量名 : 变量类型。
使用关键字 val 修饰变量表示该变量是不可变的,相当于用 Java 的 final 修饰 。一旦初始化成功后则不能再重新赋值。Kotlin 是默认推荐使用 val。开发中经常用 val 引用变量,对象、集合等。
使用关键字 var 修饰变量表示该变量时可变的,常用于修饰基本变量 ,若在实体类中使用 val 修饰变量,前端传递数据,后端可能会一直获取不到值。就像 GO 语言,习惯使用 Java 和 Kotlin 语言的朋友,在初写 Go 语言代码时,是否被它的首字母大小写逻辑给雷到呢?
注意:val 的不可变指的是本身,它指向的对象可能是可变的。这里有一个小知识,Kotlin 中的集合分只读和可读可写两种,是不是又不习惯了!
val map: MutableMap<String, String> = mutableMapOf("Key" to "ITDragon")
map["Key"] = "ITDragonBlog"
println(map) // {Key=ITDragonBlog}
var i = 2
i ++
println(i) // 3
小技巧:初写 Kotlin 代码,var 和 val 傻傻分不清楚。记住使用 val 可能出现值不修改的问题,但是都用 var 修饰变量,一般只会出现逼死强迫症的编译警告。
Kotlin 变量声明
Kotlin 的变量并非基础数据类型,而是类似 Java 的包装数据类型。不同的是:Java 的包装数据类型的默认值是 null。但这里的 Kotlin 变量都是不允许为 null 的。因为 Kotlin 是 null 安全的语言。若希望变量值可以为 null,则需要在变量类型后面加上?。如 Int?,Long?,Float? 等等
fun main(args: Array<String>) {
var b: Byte = 0
var s: Short = 0
var i: Int = 0
var l: Long = 0L
var f: Float = 0.0f
var d: Double = 0.0
var bl: Boolean = true
var c: Char = 'c'
}
Kotlin 变量取值范围
相信大家都是有一定 Java 基础的朋友,这里只用输出语句打印变量的取值范围。${}
是 Kotlin 字符串拼接的语法,相比 Java,更美观。
fun rangeValue() {println("Byte (${Byte.MIN_VALUE} ~ ${Byte.MAX_VALUE})")
println("Short (${Short.MIN_VALUE} ~ ${Short.MAX_VALUE})")
println("Int (${Int.MIN_VALUE} ~ ${Int.MAX_VALUE})")
println("Long (${Long.MIN_VALUE} ~ ${Long.MAX_VALUE})")
println("Float (${Float.MIN_VALUE} ~ ${Float.MAX_VALUE})")
println("Double (${Double.MIN_VALUE} ~ ${Double.MAX_VALUE})")
}
Kotlin 变量显示转换
Java 支持将范围小的变量隐示转换范围大的同类型变量,比如 int 类型转 long 类型,char 类型转 int 类型等。但是 Kotlin 并不支持。比如 Int 类型变量和 Char 类型变量直接相加,编译器会报错。Kotlin 必须要将 Char 变量通过执行.toInt() 方法显示转换成 Int 类型。
Kotlin 的变量还有一个特点,当声明变量后直接赋值,编译器会智能推断该变量的类型,此时变量类型可以省略。
开始觉得不习惯,后来慢慢就习惯了,这可能大概就是佛系程序员的一个特点吧
fun variableConvert(char: Char) {
var number: Int = 1
println("显示转换成 Int 类型: ${number + char.toInt()}")
var num = 2
println("智能推断变量类型: ${num.javaClass}")
}
到这里,初始 Kotlin 的内容就介绍了。Kotlin 与 Java 的区别太多太多了。Kotlin 的特点也是非常多。我会拆分成多个小章节。Kotlin 好学,但是不好讲。