自从5.18 Google IO 大会到现在,Kotlin
已实打实的“上位”一个月。不知道你自己或者身边有没有人开始学习和使用 Kotlin
呢? Kotlin 有对你带来什么变化吗?欢迎回复讨论

随着Kotlin 成为Android官方开发语言
瞬间把Kotlin推向了大众的视野,那么什么是Kotlin,Google为什么要选择Kotlin
不是自家编程语言Go也不是Scala或者Groovy等JVM语言 ?
作为一个Android开发者我也想来了解下Kotlin 话说是100%兼容Java

Kotlin具备现代静态编程语言的很多特点,如:

 Kotlin 的空降似乎让许多人措手不及,在此之前国内关于  Kotlin
的资料十分稀少。即使到现在,也有不少人对  Kotlin 不甚了解。有一些 Kotlin
相关的公众号曾整理和解答过一些常见的问题,或许对大家有所帮助:

简介

Kotlin 是一个基于 JVM 的新的编程语言,由
澳门新葡萄京所有网站,JetBrains
开发。[1]

JetBrains,作为目前广受欢迎的
Java IDE
IntelliJ
的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。

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

Kotlin 是什么?

设计目标

创建一种兼容Java的语言
让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针
让它比Java更简洁,通过支持variable type inference,higher-order
functions (closures),extension functions,mixins and first-class
delegation等实现。
让它比最成熟的竞争对手Scala语言更加简单。[1]

还有,KotlinJS,KotlinNative。

我刚刚接触 Kotlin 是在两年前,那会儿的 Kotlin 更像是 A Better
Java,它能做 Java 能做的任何事情,而且还要更出色。那时候我们还经常称
Kotlin 是一门 Jvm 上的静态语言,尽管 Kotlin-js
也在实验当中;而现在,我们只好称 Kotlin
是一门全栈的静态语言了,因为小伙儿长壮实了,不仅通吃 Jvm,Android
和前端,连 Native(注意不是 Jni)也要搞搞,真是前景一片大好。

说白了,它就是一门编程语言而已,在 Android 上被 Google 钦点,就像
Swift 之于 iOS,并不是什么洪水猛兽,不应该觉得害怕和恐慌。

开放源码

其基础编译器(他们将其改为kompiler——开创了一系列以K字打头的用语——甚至连
contributors 这类词他们也用改成了kontributors)可以被独立出来并嵌入到
Maven、Ant 或 Gradle 工具链中。这使得在 IDE
中开发的代码能够利用已有的机制来构建,从而尽可能的减少了在新环境中使用所受的干预,哪怕与那些没有安装
Kotlin 插件的开发人员一起合作项目也没有问题。
The IntelliJ Kotlin 插件扩展了 Java 编译器使得 Kotlin
代码能够得以编写、编译和调试。除此之外,关于基本的 Java
集合,已经有编写好的帮助函数,可以更顺畅地衔接将在 Java 8
中出现的集合扩展。
有两篇文章对 Kotlin 与 Java 以及 Kotlin 与 Scala
分别进行了比较,对各自特性和异同进行了对比。即便 Scala
可能还是更为强大些,Kotlin 还是尝试着提供比 Java
更好的函数、模式匹配、空指针预防和泛型。该语言同时也支持特征(traits)和模式匹配。
Kotlin 插件将在 IntelliJ(虽然提前使用计划已经演示了可用的构建,而
Kotlin 的快照构建也可以通过 JetBrains GitHub
网页得到,不过它还是要等到)未来发布的版本中才能使用。但是,你现在就可以在基于
web 的演示中体验使用该语言,通过你的浏览器来编辑 Kotlin
代码、编译并运行感受一下。
Kotlin,类似 Xtend 一样,旨在提供一种更好的 Java
而非重建整个新平台。这两种语言都向下编译为字节码(虽然
Xtend 是首先转换成相应的 Java 代码,再让 Java
编译器完成繁重的工作),而且两者都引入了函数和扩展函数(在某个有限范围内静态地增加一个新方法到某个已有类型的能力)。Xtend
是基于 Eclipse 的,而 Kotlin 是基于 IntelliJ
的,两者都提供无界面构建。能够首先演变到其他 IDE
的语言有可能成为最后的赢家。

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

没有 Java 基础,我应该学 Kotlin 吗?

官网介绍

Statically typed programming language for modern multiplatform
applications 100% interoperable with Java™ and Android™

用于现代多平台应用的静态编程语言与 Java™ 和 Android™ 100% 可互操作

特性:

应该学,作为一个有追求的程序员,你不仅要学
Kotlin,而且要了解各类型的语言,这跟你什么基础没有关系,大家都有过一个什么都不会的曾经。

但是,现阶段,Kotlin 跟 Java 关系实在密切,只要你希望用 Kotlin 开发
Jvm、Android 相关的应用程序,Java
你就必须学会,而且要学好,因为它太重要了,除了大量的 Jdk、Sdk 源码都是
Java 的以及大量的资料都是 Java 的 之外,Java 更是 Java
系语言的标杆,你需要学习掌握它,了解这一族语言的应用思路,和开发习惯,甚至了解
Java 的弊病来真正明白为什么会有 Kotlin、Groovy、Scala 这样的语言诞生。

一句话,Java 不牢,地动山摇。

为什么选择 Kotlin?

  • 简洁(大大减少样板代码的数量)

澳门新葡萄京所有网站 1

image.png

  • 安全 (避免空指针异常等整个类的错误。)

澳门新葡萄京所有网站 2

image.png

澳门新葡萄京所有网站 3

image.png

  • 互操作性 (充分利用 JVM、Android 和浏览器的现有库。)

澳门新葡萄京所有网站 4

image.png

澳门新葡萄京所有网站 5

image.png

  • 工具友好 (可用任何 Java IDE 或者使用命令行构建。)

澳门新葡萄京所有网站 6

image.png

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

不学 Java 可以直接搞 Android 开发吗?

Kotlin 看起来是什么样的?

  • 最简版

澳门新葡萄京所有网站 7

image.png

  • 面向对象的Hello

澳门新葡萄京所有网站 8

image.png

  • Android Activity

澳门新葡萄京所有网站 9

image.png

  • HTML 构造器

澳门新葡萄京所有网站 10

image.png

    1. 比Java简洁。

可以,做了很多年 Android 开发的我们居然会惊讶的发现,可以用来开发
Android 语言好多,Java 系的 Groovy、Scala 就不提了,连 C#
都可以,真是条条大路通罗马。

但是,主流语言仍然是 Java,这将是在短期内无法动摇的,加之 Kotlin 与
Java 一脉相承,关系密切,所以无论如何你都逃不过 Java 的学习。

Kotlin 用途集锦

  • Pinterest 已成功将 Kotlin
    引入了他们的应用程序,每个月有
    1 亿 5 千万人使用。
  • Gradle 正引入
    Kotlin
    作为编写脚本的语言。
  • Evernote 最近 将 Kotlin
    整合到了他们的
    Android 客户端
  • Uber 团队使用
    Kotlin
    来构建内部工具
  • 是一个开源分布式分类账号平台,由各大银行提供支持,完全由 Kotlin
    构建。
  • Coursera Android 应用程序部分用 Kotlin
    编写
  • Spring 采用 Kotlin
    的语言特性来提供更简洁的
    API
  • Trello
    Android应用程序中的所有新代码都用
    Kotlin。

看见咯 芥末多大公司在使用Kotlin 了 ! 还是感觉自愧不如…

那么

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

Kotlin 会不会慢慢把 Java 取代了?

你应该学Kotlin吗

自从5.18 Google IO 大会以来,关注 Kotlin 或者说想要搞清楚 Kotlin
是什么的人越来越多了。有不少朋友表示在这之前自己都没有听说过
Kotlin,现在突然 Google 空降一个干儿子,你是不是就慌了呢?
下面我列举几个常见的问题,希望能为大家解惑~

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

短期内不会,但会 Kotlin 的开发会把不会 Kotlin
的开发慢慢取代倒是极有可能。

Java
虽然一身毛病,但短期内其地位是无法被撼动的,为什么?一方面自然有积重难返的原因,毕竟
Java 的积累很多,完全清空转向新生的 Kotlin
或者其他语言不是一件容易的事,而且也没有必要。用 Java
写的应用不是仍然好好的在应用商店躺着吗,老板凭什么要为 Google
的钦点额外付费?

那么后面的发展可能是怎样的呢?公司老板慢慢发现 Kotlin 比 Java
的开发效率高,可以节省人力,于是尝试逐渐过渡,进入 Java 和 Kotlin
混合开发阶段,不过他接着发现,掌握 Kotlin
的程序员的成本要高一些,于是他开始盘算到底是招 10 个 Java 合适还是招 7
个 Java & Kotlin 合适。等到掌握 Kotlin
的人越来越多,大家会普遍倾向于认为 Kotlin 是一门必备技能,不会 Kotlin
的话就会被淘汰,这时候老板就只会招 Java & Kotlin 了。

Kotlin 是什么?

我刚刚接触 Kotlin 是在两年前,那会儿的 Kotlin 更像是 A Better
Java,它能做 Java 能做的任何事情,而且还要更出色。那时候我们还经常称
Kotlin 是一门 Jvm 上的静态语言,尽管 Kotlin-js
也在实验当中;而现在,我们只好称 Kotlin
是一门全栈的静态语言了,因为小伙儿长壮实了,不仅通吃 Jvm,Android
和前端,连 Native(注意不是 Jni)也要搞搞,真是前景一片大好。
说白了,它就是一门编程语言而已,在 Android 上被 Google 钦点,就像 Swift
之于 iOS,并不是什么洪水猛兽,不应该觉得害怕和恐慌。

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

现在用 Kotlin 开发 Android 靠谱吗?

没有 Java 基础,我应该学 Kotlin 吗?

应该学,作为一个有追求的程序员,你不仅要学
Kotlin,而且要了解各类型的语言,这跟你什么基础没有关系,大家都有过一个什么都不会的曾经。
但是,现阶段,Kotlin 跟 Java 关系实在密切,只要你希望用 Kotlin 开发
Jvm、Android 相关的应用程序,Java
你就必须学会,而且要学好,因为它太重要了,除了大量的 Jdk、Sdk 源码都是
Java 的以及大量的资料都是 Java 的 之外,Java 更是 Java
系语言的标杆,你需要学习掌握它,了解这一族语言的应用思路,和开发习惯,甚至了解
Java 的弊病来真正明白为什么会有 Kotlin、Groovy、Scala 这样的语言诞生。
一句话,Java 不牢,地动山摇。

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

额。。看到这个问题的时候其实我好难过,然后瞬间又不难过了,因为难过的应该是
Google——你看,人家都不相信你呀。

我从两年前开始接触
Kotlin,大概在一年半以前开始所有个人开发的应用都直接使用 Kotlin
开发,接着在公司项目中小范围尝试了
Kotlin,单从编程语言层面来看,Koltin 几乎没有任何问题,Google
也通过这次 IO 大会试图在告诉我们这一点。坚定支持 Kotlin 的还有
Square.Inc 的 Jake
大神,如果你不知道他的话,我建议你的领导开除你。国内使用 Kotlin
的公司比较有名的有沪江、英语流利说等,他们都有了比较长的使用历史,一些创业公司也发现
Kotlin
能为他们的团地带来活力,让兄弟不至于很辛苦,比如北京的快乐迭代。

所以,如果你为 Kotlin 开发 Android 靠谱不靠谱,我告诉你,非常靠谱。

但是。。。怎么每个问题都有个但是。。。如果你想要将 Kotlin
应用于到你们的项目中,那么请你先与你的领导或者同事沟通好,以免造成不必要的麻烦。

不学 Java 可以直接搞 Android 开发吗?

可以,做了很多年 Android 开发的我们居然会惊讶的发现,可以用来开发
Android 语言好多,Java 系的 Groovy、Scala 就不提了,连 C#
都可以,真是条条大路通罗马。
但是,主流语言仍然是 Java,这将是在短期内无法动摇的,加之 Kotlin 与 Java
一脉相承,关系密切,所以无论如何你都逃不过 Java 的学习。

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

(文/开源中国)    

Kotlin 会不会慢慢把 Java 取代了?

短期内不会,但会 Kotlin 的开发会把不会 Kotlin
的开发慢慢取代倒是极有可能。
Java
虽然一身毛病,但短期内其地位是无法被撼动的,为什么?一方面自然有积重难返的原因,毕竟
Java 的积累很多,完全清空转向新生的 Kotlin
或者其他语言不是一件容易的事,而且也没有必要。用 Java
写的应用不是仍然好好的在应用商店躺着吗,老板凭什么要为 Google
的钦点额外付费?
那么后面的发展可能是怎样的呢?公司老板慢慢发现 Kotlin 比 Java
的开发效率高,可以节省人力,于是尝试逐渐过渡,进入 Java 和 Kotlin
混合开发阶段,不过他接着发现,掌握 Kotlin
的程序员的成本要高一些,于是他开始盘算到底是招 10 个 Java 合适还是招 7
个 Java & Kotlin 合适。等到掌握 Kotlin
的人越来越多,大家会普遍倾向于认为 Kotlin 是一门必备技能,不会 Kotlin
的话就会被淘汰,这时候老板就只会招 Java & Kotlin 了。

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

现在用 Kotlin 开发 Android 靠谱吗?

额。。看到这个问题的时候其实我好难过,然后瞬间又不难过了,因为难过的应该是
Google——你看,人家都不相信你呀。
我从两年前开始接触
Kotlin,大概在一年半以前开始所有个人开发的应用都直接使用 Kotlin
开发,接着在公司项目中小范围尝试了 Kotlin,单从编程语言层面来看,Koltin
几乎没有任何问题,Google 也通过这次 IO
大会试图在告诉我们这一点。坚定支持 Kotlin 的还有 Square.Inc 的 Jake
大神,如果你不知道他的话,我建议你的领导开除你。国内使用 Kotlin
的公司比较有名的有沪江、英语流利说等,他们都有了比较长的使用历史,一些创业公司也发现
Kotlin
能为他们的团地带来活力,让兄弟不至于很辛苦,比如北京的快乐迭代。
所以,如果你为 Kotlin 开发 Android 靠谱不靠谱,我告诉你,非常靠谱。
但是。。。怎么每个问题都有个但是。。。如果你想要将 Kotlin
应用于到你们的项目中,那么请你先与你的领导或者同事沟通好,以免造成不必要的麻烦。

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

我想要了解 Kotlin,有哪些资料?

现在 Kotlin 的中文资料真实少得可怜,前几天掘金跟风整理了一波国内的
Kotlin
学习资料,里面的文章一半儿都是来自我们的公众号/中文博客,这意味着你看到这篇文章的时候,你正拿到了一张国内学习
Kotlin 的站台票,关注微信公众号
Kotlin,我会每周一将我听到的看到的与小伙们聊到的有意思的东西告诉大家。
中文资料(请点击阅读原文获得链接):
微信公众号:Kotlin
视频教程,这套视频本来自己录着玩的,结果没想到还有人拿到淘宝卖钱,大家不要去买啊,直接去
Github 上面找下载地址,仓库里面有代码也有
ppt。嗯,禁止拿这些去骗小白的钱。
中文博客,收集社区内的干货,翻译官方博客
中文官网,英语不好的同学可以来这里
Kotlin
大佬,Kotlin
问答社区,建议大家把问题发到这里,这样可以帮到后面有类似问题的人,另外帮助别人还可以获得积分哦,虽然我不知道这东西将来会不会可以拿出去装X。
KotlinThree,这也是我们上海分会的博客地址,他们来自沪江,目测是国内最早一批使用
Kotlin 的人之一。
小编还是推荐
:https://www.kotlincn.net/docs/reference/
Kotlin中文官网 你懂的 都是中文的哦 中文资料和书籍哦 你懂的

澳门新葡萄京所有网站 11

image.png

小伙伴们还等什么呢 动起来吧 O(∩_∩)O 写Kotlin 是件让人快乐的事情 ✌️

澳门新葡萄京所有网站 12

image.png

推荐 :
https://www.kotlincn.net/

本文参考:
https://baike.baidu.com/item/Kotlin/1133714?fr=aladdin
https://blog.kotliner.cn/2017/05/22/%E4%BD%A0%E5%BA%94%E8%AF%A5%E5%AD%A6Kotlin%E5%90%97/
https://www.kotlincn.net/docs/reference/
https://blog.kotliner.cn/
https://www.kotlincn.net/

if (nullable != null) nullable.doSomething() //
Javanullable?.doSomething() // 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一脉相承。

国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring
Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。

澳门新葡萄京所有网站 13开发者社区
QRCode.jpg