前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin 语言极简介绍《Kotlin极简教程》正式上架:

Kotlin 语言极简介绍《Kotlin极简教程》正式上架:

作者头像
一个会写诗的程序员
发布2018-08-17 14:41:20
8410
发布2018-08-17 14:41:20
举报
文章被收录于专栏:一个会写诗的程序员的博客

Kotlin具备现代(也有称下一代的)静态编程语言的很多特点,如:

类型推断、多范式(OOP,FP)支持、可空性表达、扩展函数、DSL 支持等。 另外对于安卓开发还提供了 Kotlin 安卓扩展和 诸多库,如Anko 等。

还有,KotlinJS,KotlinNative。

当然,事物都是具备两面性的。Kotlin也有缺点。 虽然,官方说100%与 Java 互操作,但是在 Java 调用 Kotlin 的时候还是存在一些不方便的地方,有少部分地方显得“不够简洁、优雅”。 但是,瑕不掩瑜。

特性:

开发效率和简洁性 空安全(类型系统编译时检查null) 扩展函数/属性(Extension Functions/Properties)、委托(Delegate) DSL 支持 集合类中丰富的函数式API、泛型等 多范式编程支持(一等OOP: 接口抽象类继承多态等等,一等FP: 高阶函数和Lambda表达式 ) 协程(Coroutines)

    1. 比Java简洁。

Java的好处是语法工整,清晰直接,严格;但是它的问题也很明显:“verbosity”,中文通俗翻译就是 “罗里吧嗦,烦死了”。经常是 Python 或者 Ruby 10行完成的逻辑或者data class,用 Java 可以轻松轻松写出三倍多的代码。大部分Java程序员对此表示很无语,小数程序员可能还会陷入一种自我催眠状态,觉得自己程序码的多,于是码的爽,于是沾沾自喜于每天可以写500或者上千行代码的自我感动中。

而 Kotlin 和 iOS 上的 swift 的出现,可以有效地节约我们程序员不少的时间,让写代码更为有效率。Kotlin 不仅仅是“A Better Java ”)。

兼容Java强大的生态的同时给Java注入年轻、灵活、高糖的语法;Kotlin的出现填掉了Java开发经常遇到的坑,而且兼容性很好,难度适中还适合Java开发人员切换。

    1. 空安全(Null Safety)。Kotlin 的显式optional加链式调用:val name = post?.author?.friends?.get (0)?.name : "none",相比一长串 if-else 是简洁了许多。

Kotlin的一大亮点就是语法层面强制Nullable,这点从实际工程角度来说还是非常有利的。虽然Scala可以用Option。Kotlin这个地方设计很高糖,写起来很舒服,并没有Scala的Option、Java的Optional的不适感。所以Kotlin从语法层面和便捷层面设计的Nullable还是要给一个大大的赞的。

另外 Java 还有最大的一个问题,在Null的处理上一直是其阿基里斯之踵(https://www.apteligent.com/technical-resource/top-5-crashes-on-android/)。 不仅仅在Android的Crash中,而且在服务端开发中NPE也普遍存在,就跟当年的C/C++的指针、内存泄漏一样让人们头疼。

在 Android top crashes 的排名上:第一 NPE(NullPointerException),第二 OOM(OutOfMemoryException,特别对于低端手机而言);Java 最近的改进也是在 annotation 上增加对于 null 的规范和检查。而 Kotlin 则是彻底规范了对于变量在 null 上检查和支持 "?:" 来简洁地处理 null。比如:

if (nullable != null) nullable.doSomething() // Java nullable?.doSomething() // Kotlin

https://fabiomsr.github.io/from-java-to-kotlin/

    1. 比Groovy安全、更具工程实践性
    1. 比Scala简单、更具工程实践性。

Kotlin是一个经过精挑细选,筛掉了部分功能的Scala。也可以说是一个填了无数大坑,经过精心强化版的Java。从设计角度来说,Scala虽然顶着多范式编程的大旗,但是无疑她就是一门非常偏FP的语言,如果是把她当成换了语法的Java来写,那肯定会写出风格诡异,可读性很差的代码来。而Scala还有Kotlin不具备的强大的类型系统、强大的模式匹配、任意方法名来代替有限的运算符重载等功能,以及还有一个迭代多年、精心设计过的强大类库;这些都是Scala比Kotlin功能更加强大的证明。

当然Scala的强大直接带来的一点就是复杂度爆炸,学习曲线陡峭,如果没有经过长期的实践和理论学习,恐怕Scala肯定会写成一个“换了语法的Java出来”,而且这样写你绝对不会觉得比Java好用。

另外Scala非常致命的一个缺陷就是兼容性实在不敢恭维,一个寿命有十多年的语言,而且还是运行在JVM上的语言居然到现在都有大版本升级二进制互相不兼容的问题,使用第三方库还要考虑下对方是什么版本的?支不支持我的版本?这个版本在目前这个项目能不能用?拿源码升级的话我能不能跨版本编译过去等蛋疼的问题。而这个兼容性从另一个角度看,个人认为Scala编译器编译出来的字节码完全就只是为了能运行在JVM上,然后顺便考虑了下与Java的交互。

PS: 就不要再用Kotlin和Scala交互了。

Kotlin没有Scala那么“高冷”,难度上是可以适合绝大多数开发人员的,加上和Java的兼容性很好,又被Google钦点,未来Kotlin必将与兄弟Java共同作为JVM上的主流语言,而且是成长潜力巨大的语言。

与Groovy、Scala或Clojure等“同门师兄弟”相比较而言,Kotlin是有诸多外部条件(JetBrains,IDEA,Android Studio,Spring 5, Gradle ,Google Android 等)优势跟语言内在优秀特性(如上所述等)的。

    1. 与Java 100% 互操作。

Kotlin添加了大量函数式风格,它的map、filter等等操作比Java 8 Stream的来得简洁直接。另外,涉及到集合类、反射、多线程、IO等操作时,Kotlin则直接使用了Java的特性,并在Java的基础上做了易用的扩展。这点跟Groovy一脉相承。

KotlinChina编程社区 微博

非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.09.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • KotlinChina编程社区 微博
    • 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档