Android技术知识Android知识Kotlin编程

Android宣布支持Kotlin

2017-05-22  本文已影响78人  小菜鸟程序媛

这次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,通过如下步骤:

参考文章

原文地址: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

上一篇下一篇

猜你喜欢

热点阅读