背景
Kotlin是由JetBrains开发的针对JVM、Android和浏览器的静态编程语言,目前,在Apache组织的许可下已经开源。使用Kotlin,开发者可以很方便地开发移动Android应用、服务器程序和JS程序。Kotlin可以将代码编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
Kotlin来源于一个岛屿的名字,全称是Kotlin Island,是英语【科特林岛】之意,这个小岛位于俄罗斯的圣彼得堡附近。之所以要命名为Kotlin,是因为Kotlin的主要开发工作就是由位于圣彼得堡分公司团队完成的。
大事年表
- 2010年,JetBrains着手开发Kotlin项目。
- 2011年7月,JetBrains发布Kotlin项目。
- 2012年2月,JetBrains在Apache 2许可证下开源Kotlin项目源码。
- 2016年2月,JetBrains发布第一个稳定版本Kotlin 1.0。
- 2017年3月,Kotlin 1.1版本发布,正式支持JavaScript,增加新功能和特性。
- 2017年5月,Google I/O大会上,Google宣布Kotlin为Andorid开发的首选语言。
- 持续更新中...
HelloWorld
package ktshare
// 包级可见的方法
fun main(args: Array<String>) {
// 结尾不需要 ;
print("Hello World!")
}
特性
1.简洁
对比java代码量更少
2.安全
对变量进行静态空值检测
3.与java的互通性
可以与java相互调用,可以利用java,android,js现有库
详细讲解
1.简洁性
1.针对android控件使用的优化
java版本
public class LoginByJavaActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
EditText username = findViewById(R.id.username);
Button login = findViewById(R.id.login);
username.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
kotlin版本
class loginByKTActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login_kt)
username.afterTextChanged { }
login.setOnClickListener { }
}
}
更加简洁清晰的for循环
companion object {
@JvmStatic
fun main(args: Array<String>) {
testFor()
}
private fun testFor() {
for(i in 0..4) {
print(i)
//结果 01234
}
for(i in 0 until 4) {
print(i)
//结果 0123
}
for(i in 0..4 step 2) {
print(i)
//结果 024
}
for(i in 4 downTo 0) {
print(i)
//结果 43210
}
}
}
更简洁的数据类
java
kotlin
data class Person(val name: String, val age: Int)
更简洁的单例模式
java
kotlin
package ktshare
object SingletonByKT {
fun method() {
println("I am Singleton")
}
}
更多样的集合工具方法
几乎涵盖了java stream流中的所有方法,并且还有新增的方法,甚至像操作集合那样操作数组
var persons = arrayListOf(
Person("赵", 18),
Person("钱", 19),
Person("孙", 20),
Person("李", 21)
)
print(persons.find { it.age == 19 })
2.空安全
相对于java的变量声明,kotlin要更严格一些,对于一个变量默认情况下是不可以赋null的,如果强行赋空值,编译器则直接会报错阻止编译通过
如果一个变量确实需要空值情况则需要使用 ?. 或者 !!. 进行处理
var p: Person? = null
print(p?.age)
print(p!!.name)
print(p.age)
当使用 “?."时,代码如果遇到null则会返回 null 不会抛出异常,
但使用“!!."时,如果遇到null则会抛出NullException。
如果执行的语句有与变量有对应关系也可以使用let操作符进行关联简化操作
p?.let {
println(it.name)
println(it.age)
}
总结
针对当下Jvm的发展趋势以及java语言固有的繁琐,陈旧等弊病,尝试着拥抱一门新兴的Jvm语言或许也是一个不错的选择。 (待完善)