Android宣布支持Kotlin

作者: 小菜鸟程序媛 | 来源:发表于2017-05-22 17:21 被阅读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,通过如下步骤:

    • 下载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

    相关文章

      网友评论

        本文标题:Android宣布支持Kotlin

        本文链接:https://www.haomeiwen.com/subject/dyxixxtx.html