引言
自从Google I/O 大会上宣布 Kotlin 成为 Android 开发的官方语言,Kotlin 就吸引了很多人的目光,笔者也收集了一些资料,整理成这篇博客来简单介绍下Kotlin。
Kotlin的起源:
Kotlin是一个基于JVM的新的编程语言,由JetBrains开发。JetBrains,作为目前广受欢迎的Java IDE IntelliJ的提供商,在Apache许可下已经开源其Kotlin编程语言。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。
接下来会从以下几个方面具体了解Kotlin
- Kotlin与Java语言上的比较;
- 使用 Kotlin 写一个Android demo;
- 尝试使用 Kotlin 代替 Java 完成服务端开发 ;
1. Kotlin与Java语言上的比较;
Kotlin相对Java主要有以下优势:
- 函数式的:Kotlin是基于面向对象的语言。使用了很多函数式编程的概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式。
函数式编程也是一个很火热的概念,具有一些比面向对象编程优秀的地方,建议可以去网上找资料了解一下。
- 可以扩展函数:意味着我们可以扩展类的更多的特性,甚至我们没有权限去访问这个类中的代码。
例如,以下代码可以更简单的使用Toast
fun Activity.toast(message: CharSequence, duration: Int = oast.LENGTH_SHORT){
Toast.makeText(this, message, duration).show()
}
- Activity:表示函数的接收者,也就是函数扩展的对象
- . :扩展函数修饰符
- toast:扩展函数的名称
- (...):扩展函数的参数,可以为null
- 高度互操作性的:可以继续使用所Java写的代码和库,因为两
个语言之间的互操作性是完美的。甚至可以在项目中使用Kotlin和Java混合编程。
我们可以轻松的使用 Intellij IDEA 自带的代码转换把Java代码转换为Kotlin代码
以转换ManActivity为例
package com.example.zz.kotlin;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
package com.example.zz.kotlin
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Kotlin 的文件是 .kt 结尾,向 .kt 文件中粘贴 Java 代码时都能自动转化为 Kotlin 代码,有点黑科技的意思。
Intellij IDEA 提供的十分贴心的转换代码功能,可以让初学者快速上手,同时也证明了 Kotlin 和 Java 兼容性良好。在熟悉 Kotlin 之后完全可以和 Java 混合开发。还有一个好处是 Kotlin 可以使用 Java 众多完善的框架,同时 Java 也可以使用 Kotlin 的优秀框架。所以 Kotlin 不仅是移动开发者需要关注的,JavaEE 开发者也可以把 Kotlin 作为第二语言掌握下来。
- 更加易表现:Kotlin最重要的优点之一。开发相同功能你可以少写很多的代码。
以下这个类是一个很常见的Java类,但是使用Kotlin可以节省很多代码量。
public class Student {
private String name;//姓名
private int age;//年龄
private String hobby;//爱好
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public