kotlin入门(2)——什么是kotlin

什么是kotlin?

Kotlin 是一个用于现代多平台应用的静态编程语言 [1],由JetBrains开发。

Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。

Kotlin已正式成为Android官方支持开发语言。

100%兼容Java

Kotlin-Js前端开发

Kotlin-Jvm服务端开发

Kotlin-Native 本地执行程序

Kotlin发展历程

2010 立项

2011.6 对外公开

2012.2 开源

2013.8 支持Android Studio

2014.6 全新开源web站点和域名Kotlinlang.org

2016.2 发布1.0

2016.9 发布1.0.4 支持apt

官方文档https://kotlinlang.org/docs/reference

Kotlin源码https://github.com/JetBrains/kotlin

Kotlin官博https://blog.jetbrains.com/kotlin/

微信公众号 Kotlin

Gradle文档

https://docs.gradle.org/current/userguide/userguide.html

使用Kotlin进行Android开发

Kotlin非常适合开发Android应用程序,将现代语言的所有优势带入Android平台,而不会引入任何新的限制:

兼容性:Kotlin与JDK 6完全兼容,确保Kotlin应用程序可以在较旧的Android设备上运行而不会出现问题。Android Studio完全支持Kotlin工具,并与Android构建系统兼容。

性能:由于非常相似的字节码结构,Kotlin应用程序的运行速度与等效的Java应用程序一样快。由于Kotlin支持内联函数,使用lambda的代码通常比使用Java编写的相同代码运行得更快。

互操作性:Kotlin与Java 100%互操作,允许在Kotlin应用程序中使用所有现有的Android库。这包括注释处理,因此数据绑定和Dagger也可以工作。

足迹:Kotlin有一个非常紧凑的运行时库,可以通过使用ProGuard进一步减少。在实际应用程序中,Kotlin运行时只添加几百个方法,小于.apk文件大小的100K。

编译时间:Kotlin支持高效的增量编译,因此虽然对于干净的构建有一些额外的开销,但增量构建通常比使用Java快或快

学习曲线:对于Java开发人员来说,使用Kotlin非常容易。Kotlin插件中包含的自动Java to Kotlin转换器有助于完成第一步。Kotlin Koans通过一系列互动练习提供语言主要功能的指南。

Kotlin for Android案例研究

Kotlin已成功被大公司采用,其中一些公司已经分享了他们的经验:

Pinterest已成功将Kotlin引入其应用程序,每月由1.5亿人使用。

Basecamp的Android应用程序是100%Kotlin代码,他们报告程序员的快乐和工作质量和速度的巨大改进的巨大差异。

Keepsafe的App Lock应用程序也已转换为100%Kotlin,导致源代码数减少30%,方法数减少10%。

Android开发工具

Kotlin团队为Android开发提供了一套超越标准语言功能的工具:

Kotlin Android Extensions是一个编译器扩展,允许您摆脱findViewById()代码中的调用,并用合成编译器生成的属性替换它们。

Anko是一个库,提供围绕Android API的一组Kotlin友好包装器,以及一个允许您使用Kotlin代码替换布局.xml文件的DSL。

kotlin的小特点

kotlin支持类型推断

var表示变量  val表示常量

fun表示方法

类的继承和实现使用    :

kotlin的每个句子不需要 加分号 ;

空指针安全  空指针(nullpointerexception或NPE)是我们使用Java最常见的崩溃,所以我们在Java中会写许多防御性的代码:

在kotlin中空指针的解决

在类型处理上,在类型的后面加上  ?  表示这个变量参数赋值为null或者返回null

对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上  ?,否则编译没有办法通过,如图。关于空指针安全的原理,可以参考这篇文章研究学习Kotlin的一些方法。

支持方法的扩展

很多时候,framework提供给我们的API往往都是比较原子的,调用的适合需要进行组合处理,因为会产生一些util类,一个简单的例子,我们想要更快的去展示一个toast信息,在Java中

在kotlin中我们只需要重写扩展方法就可以了,

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

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

所谓的lambda表达式是匿名函数,这使得我们的代码会更加简单,

高阶函数通俗的讲就是可以接受函数作为参数,也可以返回函数作为结果

举一个接受函数作为参数的例子,在Android开发中,我们经常的使用sharedpreference来存储数据,如果忘记调用apply或者commit则数据修改是不能应用,利用kotlin中的高阶函数的功能可以解决这个问题。同时也使用了方法扩展这个特性。

kotlin支持streams API和方法的引用,使函数式编程更加的方便,下图就是结合jsoup,来抓取某个proxy网站的数据,代码更加简单,实现起来也快速。

字符串模板

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

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

与 Java 交互性好

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

这表现在:

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

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

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

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

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

相比Java 7的优势到底是什么呢?

它更加易表现:这是它最重要的优点之一。你可以编写少得多的代码。

它更加安全:Kotlin是空安全的,也就是说在我们编译时期就处理了各种null的情况,避免了执行时异常。如果一个对象可以是null,则我们需要明确地指定它,然后在使用它之前检查它是否是null。你可以节约很多调试空指针异常的时间,解决掉null引发的bug。

它是函数式的:Kotlin是基于面向对象的语言。但是就如其他很多现代的语言那样,它使用了很多函数式编程的概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式。

它可以扩展函数:这意味着我们可以扩展类的更多的特性,甚至我们没有权限去访问这个类中的代码

它是高度互操作性的:你可以继续使用所有的你用Java写的代码和库,因为两个语言之间的互操作性是完美的。甚至可以在一个项目中使用Kotlin和Java两种语言混合编程。

关于性能

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

关于转向 Kotlin

其实,我在做决定之前也曾有过考虑,是不是选择了 Kotlin 就意味着放弃 Java 呢,冷静下来想一想,其实并不是那么回事,因为 Kotlin 与 Java 语法太相近,以及在 Kotlin 中无时无刻不在和 Java 相关的东西打交道,所以这点顾虑不是问题的。

对于个人的项目来转向 Kotlin,通常不是很难的选择,毕竟 Kotlin 是那么优秀的语言,相信很多人还是愿意尝试并使用这个事半功倍的语言的。

而比较难抉择的情况是如果如何让团队转用 Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。而国内团队提高效率的办法通常是增加成员。好在 Flipboard 美国团队自 2015 年(可能更早)就引入了 Kotlin,因此中国团队这边选用 Kotlin 也更加顺水推舟。当然更主要的是目前团队规模不大,成员一致认可 Kotlin 的优点。

关于团队转用 Kotlin 的方法,一般比较行得通的办法是自上而下的推行。这就意味着要么直接的技术负责人比较开明要么就是需要有人来不断推介来影响团队。

现在好了,有了 Google 的支持,Kotlin 转 Android 相信在不久的将来就会全面展开。篡改 Python 的一句名言「人生苦短,我用 Kotlin」,这样一个高效实用的语言应该会被越来越多的团队所接受,并应用到开发生产中。当然也希望在国内环境下大放异彩。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335