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

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编程社区 微博

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


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

什么叫代码的可读性?为什么说Kotlin的可读性比Java好?

不久之前,我看了一篇文章,大意是Kotlin与Java之间的对比,像这种文章,我一般是直接忽略的,但是那天我还是打开了,然后就看到一个非常吃惊的结果。 里面有一...

2517
来自专栏Java呓语

抽象工厂模式(选择产品簇)

对简单工厂模式还不了解的可以查看下我的历史文章 简单工厂模式,简单工厂模式的核心是使用工厂实现选择创建产品实现,这应该很好理解。

1092
来自专栏ACM算法日常

唯快不破的01序列——位运算初识

众所周知,计算机的运算使用的就是二进制,它会把十进制的数转化为二进制,然后进行二进制运算,最后再转回十进制展现给我们。而位运算指的是:由于数字在计算机里...

1403
来自专栏web编程技术分享

你可曾见过如此简单粗暴的JavaScript解说 -- js脚本运行机制

3126
来自专栏一个会写诗的程序员的博客

第10章 集合类与泛型

10.1 Kotlin集合类 10.1.1 不可变集合类 10.1.1.1 List 10.1.1.2 Set 10.1.1.3 Map

863
来自专栏企鹅号快讯

为什么说Kotlin的可读性比Java好?

作者|小创 编辑|覃云 不久之前,我看了一篇文章,大意是 Kotlin 与 Java 之间的对比,像这种文章,我一般是直接忽略的,但是那天我还是打开了,然后就看...

3405
来自专栏非著名程序员

七夕节,程序员特有的表白方式!

以上这首告白书,来自于网络,我只是找到了这首程序员的告白诗,最早的时间出现在 2009 年 1 月 5 日,不知道作者是谁。(侵删)

2971
来自专栏一个会写诗的程序员的博客

[zz]Kotlin 和 Checked ExceptionKotlin 和 Checked Exception

最近 JetBrains 的 Kotlin 语言忽然成了热门话题。国内小编们传言说,Kotlin 取代了 Java,成为了 Android 的“钦定语言”,很多...

822
来自专栏大数据钻研

如何设计优雅的类结构

注:正文中的引用是直接引用作者作者的话,两条横线中间的段落的是我自己的观点,其他大约都可以算是笔记了。 「Clean Code」这本书从这一章开始文风有些变化,...

2826
来自专栏更流畅、简洁的软件开发方式

《你必须知道的.net》读书笔记 001——1.1 对象的旅行

    好久没看书了,上次看书的时候还是一年前了,一个偶然的机会,比较系统的看了一下OO的基础,封装、继承、多态等,当时真的是很不会,看了也是一知半解,迷迷...

2059

扫码关注云+社区

领取腾讯云代金券