Android培训

亿元级外企Android培训企业

  • 全国服务监督电话4001118989
Android培训 > Android资讯 > kotlin语言介绍,带你了解和学习kotlin编程语言
  • kotlin语言介绍,带你了解和学习kotlin编程语言

    发布:Android培训  来源:Android资讯  时间: 2017年05月19日

  • 相信很多开发人员,尤其是Android开发者都会或多或少听说过Kotlin,当然如果没有听过或者不熟悉也没有关系。5月18日谷歌在今日举行的I/O开发者大会上宣布,将Kotlin语言作为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,与Java100%互通,并具备诸多Java尚不支持的新特性。...

  • 相信很多开发人员,尤其是Android开发者都会或多或少听说过Kotlin,当然如果没有听过或者不熟悉也没有关系。5月18日谷歌在今日举行的I/O开发者大会上宣布,将Kotlin语言作为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,与Java100%互通,并具备诸多Java尚不支持的新特性。
    Android kotlin发布会

    Android kotlin发布会
    在上个月,Flipboard中国的Android项目确定了正式将Kotlin作为项目开发语言,这就意味着新增的代码文件将以Kotlin代码格式出现,而且同时旧的Java代码也将会陆陆续续翻译成Kotlin代码。在使用Kotlin的这段时间,被它的简洁,高效,快捷等等特点震撼,所以有必要写一篇文章来谈一谈Kotlin的特性,如若能取得推广Kotlin的效果则倍感欣慰。

    Android kotlin发布会

    Android kotlin发布会
    Android虽然已经成为了移动端市场占有率第一的操作系统,且影响力也延伸到了车载、TV、智能可穿戴领域,不过对于谷歌来说,Android所依赖的开发语言JAVA的版权掌握在Oracle公司手中,是的谷歌如鲠在喉,灰常难受。

    为了摆脱JAVA的束缚,谷歌推出了Kotlin语言,意欲取代Android中JAVA的地位,如今,2017谷歌I/O全球开发者大会上,谷歌正式宣布,将Kotlin语言作为安卓开发的一级编程语言,并从Android Studio 3.0开始,将直接集成Kotlin而无需安装任何的插件。
    Android kotlin发布会

    Android kotlin发布会
    Kotlin语言是由JetBrains去年发明的,它受到欢迎,主要是因为它运行在Java虚拟机上,可以和java一起使用来构建应用程序。 这意味着开发人员可以使用现有的代码,轻松地构建新的功能或替代Java代码。 由于Kotlin依赖于Java,所以这两种语言都将继续得到支持。

    谷歌将致力于推动Kotlin相关安卓开发工具的发展,使得使用Kotlin来开发安卓应用更加高效。当然生态系统不是一天就可以创建好的,Kotlin何时可以取代Java成为安卓开发第一语言还需要时日。

    了解Kotlin,看下面的内容

    一、Kotlin 概述

          说到 Kotlin 大家可能都看到,至少是听说过,但可能没有去认真的了解过,但对于 Android 开发者来说 Android Studio 就太熟悉了,Android Studio 是基于 IntelliJ IDEA 集成的,而开发 IntelliJ IDEA 的公司 JetBrains 软件开发公司就是 Kotlin 语言的研发公司,想必这样 Kotlin 的距离和我们拉近了不少,Kotlin 是一个基于 JVM 的新的编程语言,可以编译成 Java 字节码,也可以编译成JavaScript,方便在 JVM 的设备上运行,最关键的是它完全兼容 Java,容许在一个项目中同时使用,一种语言的发展会有一个走向成熟的过程,但相信 Kotlin 对于 Android 来说可能会是未来的开发语言首选,就像 Google 退出的 Andorid Studio 现在成为 Android 开发现在主要使用的 IDE 一样,但是我们也不用过于着急和恐慌,毕竟事物的发展都是需要经历一个过程

    Kotlin 由 JetBrains 在 2010 年开发,2011 年开源,2016 年发布 1.0 版,2017 年 4 月发布 1.1.2 版。

    谷歌安卓团队和 JetBrains 的关系不一般。Android Studio 就是基于 JetBrains 开发的 IntelliJ IDEA 社区版;

    谷歌和 JetBrains 将为 Kotlin 成立一个非盈利基金会。Kotlin 语言的开发,还是 JB 为主导。
    Kotlin 语言的开发团队,目前大约 40 人。会继续往常那样运作。Andrey Breslav 还是 Kotlin 语言的首席设计师。

    JetBrains 对 Kotlin 的愿景是:用同一种语言,桥接多平台的不同应用的端对端开发。包括全栈 Web 应用、Android 和 iOS 客户端、嵌入式/物联网等等。

    Kotlin 与 Java 100% 互通,并具备诸多 Java 尚不支持的新特性。

    Android Studio 3.0 预览版已支持 Kotlin。下载 AS 3.0 预览版后,打开现有的 Java 文件,在「Code」菜单中选择「Convert Java File to Kotlin File」。AS 会添加 Kotlin 依赖,然后把 Java 代码转成同等功能的 Kotlin 代码。
    Kotlin 易于上手,可以逐步引入到现有项目中。这意味着安卓开发者目前现有的技能和技术积累/投资并没有浪费。

    二、Kotlin的特性

    Kotlin是一种兼容Java的语言;
    Kotlin比Java更安全,能够静态检测常见的陷阱。如:引用空指针;
    Kotlin比Java更简洁,通过支持variable type inference,higher-order functions (closures),extension functions,mixins and first-class delegation等实现;
    Kotlin可与Java语言无缝通信。这意味着我们可以在Kotlin代码中使用任何已有的Java库;同样的Kotlin代码还可以为Java代码所用;
    Kotlin在代码中很少需要在代码中指定类型,因为编译器可以在绝大多数情况下推断出变量或是函数返回值的类型。这样就能获得两个好处:简洁与安全;

    语法简单,不啰嗦

    //variables and constantsvar currentVersionCode = 1   //变量当前的版本号,类型Int可以根据值推断出来var currentVersionName : String = "1.0" //显式标明类型val APPNAME = "droidyue.com" //常量APPNAME 类型(String)可以根据值推断出来//methodsfun main(args: Array<String>) {    println(args) }// classclass MainActivity : AppCompatActivity() { }// data class  自动生成getter,setting,hashcode和equals等方法data class Book(var name: String, val price: Float, var author: String)//支持默认参数值,减少方法重载fun Context.showToast(message: String, duration:Int = Toast.LENGTH_LONG) {    Toast.makeText(this, message, duration).show()
    • Kotlin支持类型推断,没有Java那样的啰嗦。

    • 另外用var表示变量,val表示常量更加的简洁

    • 方法也很简单,连function都缩写成了fun,平添了几分双关之意。

    • 类的继承和实现很简单,使用:即可

    • Kotlin每个句子都不需要加分号(;)

    空指针安全

    空指针(NullPointerException或NPE)是我们使用Java开发程序中最常见的崩溃了。因为在Java中我们不得不写很多防御性的代码,比如这样

    public void test(String string) {    if (string != null) {        char[] chars = string.toCharArray();        if (chars.length > 10) {            System.out.println(((Character)chars[10]).hashCode());        }    } }

    在Kotlin中空指针异常得到了很好的解决。

    • 在类型上的处理,即在类型后面加上?,即表示这个变量或参数以及返回值可以为null,否则不允许为变量参数赋值为null或者返回null

    • 对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上?,否则编译无法通过。

    如下面的代码就是Kotlin实现空指针安全的一个例子,而且相对Java实现而言,简直是一行代码搞定的。

    fun testNullSafeOperator(string: String?) {    System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode()) } testNullSafeOperator(null) testNullSafeOperator("12345678901") testNullSafeOperator("123")//resultnull49null

    关于空指针安全的原理,可以参考这篇文章研究学习Kotlin的一些方法

    支持方法扩展

    很多时候,Framework提供给我们的API往往都时比较原子的,调用时需要我们进行组合处理,因为就会产生了一些Util类,一个简单的例子,我们想要更快捷的展示Toast信息,在Java中我们可以这样做。

    public static void longToast(Context context, String message) {    Toast.makeText(context, message, Toast.LENGTH_LONG).show(); }

    但是Kotlin的实现却让人惊奇,我们只需要重写扩展方法就可以了,比如这个longToast方法扩展到所有的Context对象中,如果不去追根溯源,可能无法区分是Framework提供的还是自行扩展的。

    fun Context.longToast(message: String) {    Toast.makeText(this, message, Toast.LENGTH_LONG).show() } applicationContext.longToast("hello world")

    注意:Kotlin的方法扩展并不是真正修改了对应的类文件,而是在编译器和IDE方面做得处理。使我们看起来像是扩展了方法。

    Lambda, 高阶函数,Streams API, 函数式编程支持

    所谓的Lambda表达式是匿名函数,这使得我们的代码会更加的简单。比如下面的代码就是lambda的应用。

    findViewById(R.id.content).setOnClickListener {    Log.d("MainActivity", "$it was clicked") }

    所谓的高阶函数就是

    • 可以接受函数作为参数

    • 也可以返回函数作为结果

    举一个接受函数作为参数的例子。在Android开发中,我们经常使用SharedPreference来存储数据,如果忘记调用apply或者commit则数据修改不能应用。利用Kotlin中的高阶函数的功能,我们能更好的解决这个问题

    fun SharedPreferences.editor(f: (SharedPreferences.Editor) -> Unit) {    val editor = edit()    f(editor)    editor.apply() }//实际调用PreferenceManager.getDefaultSharedPreferences(this).editor {    it.putBoolean("installed", true) }

    当然这上面的例子中我们也同时使用了方法扩展这个特性。

    Kotlin支持了Streams API和方法引用,这样函数式编程更加方便。比如下面的代码就是我们结合Jsoup,来抓取某个proxy网站的数据,代码更加简单,实现起来也快速。

    fun parse(url: String): Unit {    Jsoup.parse(URL(url), PARSE_URL_TIMEOUT).getElementsByClass("table table-sm")        .first().children()        .filter { "tbody".equals(it.tagName().toLowerCase()) }        .flatMap(Element::children).forEach {            trElement ->            ProxyItem().apply {                trElement.children().forEachIndexed { index, element ->                    when (index) {                        0 -> {                            host = element.text().split(":")[0]                            port = element.text().split(":")[1].toInt()                        }                        1 -> protocol = element.text()                        5 -> country = element.text()                    }                }            }.let(::println)        } }

    字符串模板

    无论是Java还是Android开发,我们都会用到字符串拼接,比如进行日志输出等等。在Kotlin中,字符串模板是支持的,我们可以很轻松的完成一个字符串数组的组成

    val book = Book("Thinking In Java", 59.0f, "Unknown") val extraValue = "extra"Log.d("MainActivity", "book.name = ${book.name}; book.price=${book.price};extraValue=$extraValue")

    注意:关于字符串拼接可以参考这篇文章Java细节:字符串的拼接 

    与Java交互性好

    Kotlin和Java都属于基于JVM的编程语言。Kotlin和Java的交互性很好,可以说是无缝连接。这表现在

    • Kotlin可以自由的引用Java的代码,反之亦然。

    • Kotlin可以现有的全部的Java框架和库

    • Java文件可以很轻松的借助IntelliJ的插件转成kotlin

    Kotlin应用广泛

    Kotlin对Android应用开发支持广泛,诸多工具,比如kotterknife(ButterKnife Kotlin版),RxKotlin,Anko等等,当然还有已经存在的很多Java的库都是可以使用的。

    除此之外,Kotlin也可以编译成JavaScript。最近使用Kotlin写了一段抓取proxy的代码,实现起来非常快捷。甚至比纯JavaScript实现起来要快很多。

    fun handle(): Unit {        window.onload = {            document.getElementsByClassName("table table-sm").asList().first()                    .children.asList().filter { "TBODY".equals(it.tagName.toUpperCase()) }                    .flatMap { it.children.asList() }.forEach {                var proxyItem = ProxyItem()                it.children.asList().forEachIndexed { index, element ->                    when (index) {                        0 -> {                            proxyItem.host = element.trimedTextContent()?.split(":")?.get(0) ?: ""                            proxyItem.port = element.trimedTextContent()?.split(":")?.get(1)?.trim()?.toInt() ?: -1                        }                        1 -> proxyItem.protocol = element.trimedTextContent() ?: ""                        5 -> proxyItem.country = element.trimedTextContent() ?: ""                    }                }.run {                    console.info("proxyItem $proxyItem")                }            }        }    }

    关于性能

    Kotlin的执行效率和Java代码的执行效率理论上一致的。有时候Kotlin可能会显得高一些,比如Kotlin提供了方法的inline设置,可以设置某些高频方法进行inline操作,减少了运行时的进栈出栈和保存状态的开销。

    读到这里,是不是想要尝试一下Kotlin呢,它简洁的语法,汇集诸多特性,高效率实现等等,已经在国外风生水起,国外的Pintereset, Square, Flipboard等公司已经开始应用到生产中。


    三、为什么学习 Kotlin

           从现在开始,Android 将全面支持 Kotlin,意味着 Android 开发者不需要再担心任何兼容性,Google 将会大力支持 Android 在Kotlin 的发展,来张图,来自 Kotlin 官方网站,简单明了说明 Kotlin 的优点,具体的实例大家可以去官网学习,毕竟官网才是不走样的第一手资料

    Kotlin 是一个基于 JVM 的新编程语言,用 JetBrains 的话来说是「更现代化、更强大」的语言。

    四、如何学习Kotlin

    Kotlin官网:

    http://kotlinlang.org/:无疑是最正规的,二手知识,有好有坏

    kotlin中文官网:

    https://www.kotlincn.net/
    国内中文文档:

    https://huanglizhuo.gitbooks.io/kotlin-in-chinese/content/
    国内中文文档2:

    http://www.liying-cn.net/kotlin/docs/reference/
    kotlin的gitbook网址:

    https://www.gitbook.com/book/hltj/kotlin-reference-chinese/details
    视频教程地址:

    https://zhuanlan.zhihu.com/p/23101437
    入门博客地址:

    http://www.jianshu.com/p/cf1f96c56150
    http://droidyue.com/blog/2017/05/18/why-do-i-turn-to-kotlin/?from=timeline&isappinstalled=0

    五、Android Studio使用Kotlin

    Kotlin-github地址
    https://github.com/JetBrains/kotlin

    使用AndroidStudio下载Kotlin相关插件
    执行Settings->plugins->BrowseRepositories中搜索“Kotlin

    下载Kotlin相关插件

    安装Kotlin

    使用Kotlin创建KotlinFile/Class或者是KotlinActivity
    Kotlin插件安装成功后,执行new操作,会发现弹窗多出了两个Kotlin相关选项:

    安装Kotlin

    1)“KotlinFile/Class”:一般Kotlin类

    	
    
    
    
    

    /**

    * Created by hejunlin on 2017/5/18.

    * blog: http://blog.csdn.net/hejjunlin */

    import com.squareup.okhttp.OkHttpClient

    object OkClient{   

           private val client = OkHttpClient()   

           fun instance() = client

    }

    2)“Kotlin Activity”:Activity类

    	
    
    
    
    

    /**

    * Created by hejunlin on 2017/5/18.

    *blog: http://blog.csdn.net/hejjunlin

    */

    import android.support.v7.app.AppCompatActivity

    import android.os.Bundle class Main2Activity : AppCompatActivity() {

       override fun onCreate(savedInstanceState: Bundle?) {

           super.onCreate(savedInstanceState)

           setContentView(R.layout.activity_main2)   

        }

    }

  • 上一篇:Android O最给力改进:App启动速度快两倍!

    下一篇:Android Studio 优秀插件汇总,24款Android Studio 插件推荐

网站导航
2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56