Kotlin 带你飞
Kotlin 是一种基于 JVM 的编程语言,由 JetBrains 开发,已正式成为 Android 官方开发语言,完全兼容 Java,更安全、更简洁。
版权声明:本文为 frendy 原创文章,可以随意转载,但请务必在明确位置注明出处。
000.png
优势
官方号称更简洁、更安全、兼容性更好、各种 IDE 或命令行工具都适用。
事实上呢,也确实如此,Kotlin 具备许多 Java 没有的特性。来,一起飞:
1. 简洁
为什么可以简洁,因为可以避免大量的模板代码;为什么可以避免,因为大部分典型情况都在语言中默认覆盖实现了。我们来看看下面的例子:
a) Java 实现典型的数据类:
public class User {
private long id;
private String name;
private String addr;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
@Override public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", addr='" + addr + '\'' +
'}';
}
}
b) Kotlin 则会简洁很多,只需要定义如下即可,所有属性和它们的访问器都会自动生成,以及一些有用的方法,比如 toString():
data class User(
var id: Long,
var name: String,
var addr: String)
2. 空安全
NullPointerException 是每个 Java 开发者都会遇到的 Bug,怎么修改,加个空判断咯。但是这样的判断加多了其实也烦,代码也不够美观。Kotlin 跟其他现代语言一样,是空安全的,通过一个安全调用操作符(?
)来明确地指定一个对象是否能为空。
var str: String = null; //✘ 直接报错,无法编译通过
var str: String ?= null; //✔ 添加安全调用操作符,明确指定 str 可以为空
3. 更易扩展
Kotlin 可以给任何类添加函数,比如给 Context 添加 toast 函数如下:
fun Context.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(this, message, duration).show()
}
它可以被任何 Context 或者它的子类调用,比如 Activity 或者 Service,是不是很方便。这里在 Activity 内部可以直接调用如下:
toast("Hello frendy!")
toast("Hello frendy!", Toast.LENGTH_LONG)
4. 支持函数式(Lambda)
Lambda 表达式笔者目前使用的不多,这里以《Kotlin for android developers》书中的 setOnClickListener() 简化之路来介绍吧:
a) Java 实现一个事件点击监听:
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(v.getContext(), "Click", Toast.LENGTH_SHORT).show();
}
});
b) Kotlin 实现如下,暂时看来好像并没有简洁很多是吧:
view.setOnClickListener(object : OnClickListener {
override fun onClick(v: View) {
toast("Click")
}
}
c) Kotlin 允许 Java 库的一些优化,Interface 中包含单个函数可以被替代为一个函数:
fun setOnClickListener(listener: (View) -> Unit)
d) 一个 Lambda 表达式通过参数的形式被定义在箭头的左边(被圆括号包围),然后在箭头的右边返回结果值。在这个例子中,我们接收一个 View,然后返回一个 Unit(没有东西):
view.setOnClickListener({ view -> toast("Click")})
e) 当我们定义了一个方法,我们必须使用大括号包围,然后在箭头的左边指定参数,在箭头的右边返回函数执行的结果。如果左边的参数没有使用到,我们甚至可以省略左边的参数:
view.setOnClickListener({ toast("Click") })
f) 如果这个函数的最后一个参数是一个函数,我们可以把这个函数移动到圆括号外面:
view.setOnClickListener() { toast("Click") }
g) 并且,最后,如果这个函数只有一个参数,我们可以省略这个圆括号:
view.setOnClickListener { toast("Click") }
好吧,现在是不是简洁了很多,逻辑也更直观、更清晰了。
环境配置
了解完 Kotlin 的优势,有木有一股操刀上阵的冲动?先别急,我们一起磨磨刀,配置下开发环境先。
1. 安装 Kotlin 插件
当然 Android Studio 3.0 以上版本是默认自带的,这里笔者用的是 2.3.2 版本,因此需要自己安装,File -> Settings -> Plugins -> 搜索安装 Kotlin,如下图示:
001.png2. 新建 Kotlin Activity
002.png3. 让 Gradle 自动配置 Kotlin
003.png选择 Kotlin 编译器版本:
004.png完成后,Gradle 会自动添加以下依赖,如果想自己手动配置,参考下面红框内配置即可:
005.png 006.png4. 配置插件
Kotlin Android Extensions 是 Kotlin 团队研发的插件,包含了 view 的绑定。因此代码中可以不再需要大段大段的 findViewById() 了。
apply plugin: 'kotlin-android-extensions'
007.png
Hello World
一切就绪,起飞起飞:
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tvHello.setText("hello world");
}
}
008.png
qrcode_card.png愿大家都能飞得更高、飞得更开心...嗯,开心很重要...