这次Google I/O大会宣布android支持Kotlin作为开发语言,Kotlin是一种设计精妙的语言,相信回事Android开发更快更有趣,已经被一些主要的开发商作为应用程序开发所使用,Kotlin也和Java能够很好的同时使用,两种语言之间可以轻松的相互操作。
Kotlin插件已经与Android Studio 3.0绑定了,所以你现在可以下载Android Studio 3.0的预览版使用,Kotlin是被JetBrains公司开发的,而Intellij也是由该公司开发的,所以对于Kotlin的支持并不奇怪。
除了IDEA支持之外,Google还宣布与JetBrains进行合作,将Kotlin作为一种非盈利的基础来推动。
say "Hello" to Kotlin
Kotlin与java很类似
package helloworld
fun main(args:String){
println("Hello World!");
}
乍一看,你会看到大括号,类,包,方法,但是随着学习的深入。例如,也许你会问为什么要实现一些getter和setter等样板类代码以及需要覆盖equals,hashCode和toString等方法,以下是java语言的典型示例
public class Customer {
private String name;
private String email;
private String company;
public Customer(String name) {
this(name, "", "");
}
public Customer(String name, String email) {
this(name, email, "");
}
public Customer(String name, String email, String company) {
this.name = name;
this.email = email;
this.company = company;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Customer customer = (Customer) o;
if (name != null ? !name.equals(customer.name) : customer.name != null) return false;
if (email != null ? !email.equals(customer.email) : customer.email != null) return false;
return company != null ? company.equals(customer.company) : customer.company == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (email != null ? email.hashCode() : 0);
result = 31 * result + (company != null ? company.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
", company='" + company + '\'' +
'}';
}
}
使用Kotlin,你就不需要写那些代码了,下面这一行代码与上面的整个类相同
data class Customer(var name:String,var email:String="",var company:String="")
Kotlin历史
Kotlin的出现已经有一段时间了,在2011年就已经被宣布了,并且第一次预览版在2012年发布,Kotlin 1.0版本在2016年发布,而JetBrains也一直致力于维护Kotlin的稳定性以及兼容性。
你可以在https://kotlinlang.org找到优秀的学习资料和参考资料,Android团队发现Kotlin Koans教程作为开始编写Kotlin片段的一种快速学习方式是非常有用的,这些教程的范围从简单到复杂。
为什么是Kotlin
为什么Android团队决定支持Kotlin,最重要的是,这是因为android团队认为Kotlin是一种伟大的语言,将使Android应用程序开发起来更轻松,更愉快。
Kotlin也是现有Android生态系统的绝佳搭档,他与Java语言100%兼容,你可以根据需要将Kotlin添加到现有的代码库中,并且在同一个项目中自由使用两种语言。
最终,很多开发者都说他们很喜爱Kotlin变成语言,Android官方团队的很多开发者也这样说,已经有一个热衷于Android的Kotlin开发社区,Android团队经常在公开活动中对Kotlin提出疑问,而且已经得到了反馈。
快速预览
为了帮助你们了解Kotlin,这里有一个快速的但是不完整的Kotlin之旅。
Nullable
Kotlin编译器强制可以显示的声明可以为空值的变量。因此在运行过程中不会出现空指针异常。
var neverNull: String="something"
var mightBeNull:String?=null //?表明可以为null
if(neverNull.length>0){
}
if(mightBeNull.length>0){ //编译器会捕获这个错误
}
命名参数和默认的参数
fun orderPizza(size: Size, pepperoni: Boolean, mushrooms: Boolean,
ham: Boolean, pineapple: Boolean, pickles: Boolean,
sausage: Boolean, peppers: Boolean, onion: Boolean)
{
...
}
// Wait… did I just order pickles on my pizza?
// Why do we even have that option?
orderPizza(Size.LARGE, true, false, false, false, true,
false, true, false)
设置默认值
fun orderPizza(size: Size,
pepperoni: Boolean = false,
mushrooms: Boolean = false,
ham: Boolean = false,
pineapple: Boolean = false,
pickles: Boolean = false,
sausage: Boolean = false,
peppers: Boolean = false,
onion: Boolean = false)
{
...
}
orderPizza(Size.LARGE, ham = true, mushrooms = true)
这样写减少了需要重载的函数的数量
when表达式
when{
password.equals("password") -> println("Insecure password")
password.length < 4 -> println("Too short")
else -> {
println("Secure password")
}
}
智能转换
如果你需要将一个对象转换成另外一个对象的时候,需要使用instance of来进行测试,但是Kotlin就不需要这么做了
if(obj is String){
//编译器将obj转换成String
if(obj.length>0){
...
}
}
Kotlin中
when (obj){
is Cat -> obj.meow(...)
is Dog -> obj.woof(...)
else -> {
}
}
扩展方法
Kotlin将新方法定位到现有的类型上,如果你希望String类有一个toPigLain方法,你可以自己添加,而无需创建一个新的帮助类。
//"String."表明这些方法应该继承现有的String类
fun String.toPigLatin():String{
...
}
val plainOldString:String = "some text"
println("some text".toPigLatin())
解构赋值
我们前面已经见识到了可以轻松定义一个简单的类:
data class Order(val itemCode:String,val quantity:Int,val price:Float)
fun getOrder(...):Order{
return Order(itemCode,quantity,price)
}
要得到所有的方法,你可以使用解构声明语法,以下语句使用Order对象,提取其三个属性,然后分配给三个变量,这些变量都是由Kotlin编译器提供的,这里为你推荐了正确的类型。
val(what,howMany,howMuch) = getOrder(...)
lambdas表达式
Kotlin对于Lambda有非常简洁的语法,可以很容易表达强大的变成范例,这是一个简单的例子,它使用lambda来测试集合中的所有内容都是String:
fun allString(collection:Collection) = collection.all{it is String}
fun generatePage(withEmphasis : Boolean) {
val result =
html {
head {
title { +"Kotlin Builders" }
}
body {
h1 { +"Kotlin Builders" }
p {
+"This is "
if (withEmphasis) b { +"really " }
+"interesting"
a(href = "https://goo.gl/rHwJio") { +"More here" }
}
}
}
println(result)
}
入门
如果你想使用Kotlin入门,你可以直接使用这个代码,在你的app中尝试使用Kotlin,通过如下步骤:
- 下载Android Studio 3.0
- 打开已经存在的java文件
- 调用Code > convert java file to kotlin file
IDE将会添加Kotlin依赖到你的项目中,然后转换java代码到koelin代码。
参考文章
原文地址:https://android-developers.googleblog.com/2017/05/android-announces-support-for-kotlin.html
Kotlin入门:https://developer.android.com/kotlin/get-started.html
Kotlin学习资料:https://developer.android.com/kotlin/resources.html
网友评论