我究竟要不要学习Kotlin呢?
要回答这个问题,我们先把时间拨回到2017年5月18日,安卓团队在谷歌 I/O 2017 大会上宣布 Kotlin 成为官方头等支持语言。
彼时谷歌技术大牛 Steve Yegge 发表了一篇关于 Kotlin 的使用体会总结文章:“为什么说 Kotlin 比你们用的那些垃圾语言都好?”
一时间这条爆炸性资讯在引发的热议一直持续到了今天。
时间是检验真理的唯一标准,接下来我们来看看国内外技术专家,使用kotlin开发的感受!
Google Android 专家Annyce Davis:“当 Kotlin 出现时,我立刻被它吸引了,因为它的很多语法特性让我想起了 Groovy。它既整洁又精炼。”
Google Android 专家Sebastiano Poggi:“我真的真的很喜欢这门语言。我个人认为它在很多情况下使得编码变成一件愉快的事情,相比之前,同样的情况下用 Java 语言编码将会感到痛苦和繁琐。Kotlin 有时让我觉得自己就像一个 10 倍效率开发者。”
Google Android 专家Jorge Barroso:“Kotlin 迈出了 Android 开发的一大步,在这之前,Android 缺少 Kotlin 所带来的特性,相比于其他的 Java 平台,Android 平台的 Java 开发有些过时,即使现在有在推动 Java 8,但它还是不会变成我们喜欢的现代编程语言。
Google Android 专家Mark Allison:“虽然我也很喜欢 Kotlin,但我不认为它已经足够成熟到能够在线上产品中使用。成熟模式和最佳实践的缺乏,使得 Kotlin 编写的代码可能难以维护。”
Google Android 专家Dmytro Danylyk:“对于那些停留在 Android 世界的开发者而言,Kotlin 是一个真正的规则改变者,它拥有很多我喜欢的特性:空类型安全,data classes,属性和懒加载属性,扩展函数,协程,不变性等等。
我很享受使用 Koltin 来编码,因为我没有必要在项目中引入太多的第三方库,Kotlin 已经非常好的提供了大部分的支持。”
Google Android 专家Anup Cowkur:“我曾经使用过像 Haskell 和 Elixir 这样的语言进行编码,因此当我进行 Android 开发时时常在想:“为什么 Android 中不能有这样好用的特性?”。现在使用 Kotlin,我们可以做到了。”
Google Android 专家David Vávra:“在我的主要应用(Settle Up)的生产环境中我使用了 Kotlin,它已经足够成熟,而且相比 Java(任何版本) 有很多的优点。Kotlin 完全兼容现有的 Java 工具和函数库,同时能够很好的在 Android Studio 中使用。如果现在新创建一个 APP,我肯定会选择 Kotlin。”
听完了Google大牛的各种夸 ,难免有黄婆卖瓜自卖自夸的嫌疑?接下来我们看看国内移动开发领域大神对kotlin的看法:
鸿洋:“我每天都会看一些新的库或者文章,包括Google对外的一些库,已经有非常多的一部分都是用Kotlin对外输出的,如果我不会,对我学习起来有一定阻碍。所以我选择学习Kotlin,是为了更好的学习!总之,我们应该了解自己当下最需要的,而不是什么技术最热门。”
郭霖:“之前喷kotlin,觉得用了kotlin后项目的构建速度会大幅降低,现在我改真香了!”
美团团点评企业平台研发部刘自鹏:“我认为Kotlin 应用于 Android 开发相比传统 Java优势,在于依赖于 Kotlin 大量的语法糖以及更简洁易表现的语法风格能够大大提高开发效率,减少代码量,降低维护成本。
目前来看最大的劣势就是普及率太低了吧!团队开发,如果你一个人用 Kotlin ,那必定会产生某些沟通问题,或者矛盾。”
阿里水滴技术团队:“如果你用Kotlin开发过业务,很快就会意识到它相较于Java的语法更加简洁、高效。比如Kotlin做了这些改良:
在很大程度上实现了类型推导,而Java在SE 10才支持了局部变量的推导。
放弃了static关键字,但又引入了object,可以直接用它来声明一个单例。而作为比较,Java则必须依靠构建所谓的“单例模式”才能等效表达。
引入了一些在Java中没有的“特殊类”,比如Data Classes(数据类)、Sealed Classes(密封类),我们可以构建更深程度上的代数数据类型,结合when表达式来使用。”
腾讯Bugly:“我们为什么需要 Kotlin?答:消失的 Getter 和 Setter、又见空指针、Smart Cast、打日志、再见Utils、晚安ButterKnife...”
听完了上述专家们使用kotlin的感受,接下来我们再从技术层面剖析你应该完全学习Kotlin 语言的理由:
0# Java 互操作性
Kotlin是 100% 与 Java 具备互操作性的。你可以使用 Kotlin 继续你老的 Java 项目开发。所有你熟悉的 Java 框架仍然可用,任何框架,不管是 Kotlin 写的,还是你固执 Java 小伙伴写的都可以。
1# 熟悉的语法
Kotlin 不是诞生于学术界的怪异语言。其语法是 OOP 领域的任何开发者都熟悉的,可以或多或少的有一些了解。当然和 Java 还是有些不同的,例如重构后的构造函数以及使用 val 的变量声明等等。下面是一个基本的 Kotlin 示例代码:
2# 字符串插值
这相当于是更智能,更具备可读性的 Java 的 String.format() 方法的 Kotlin 实现:
3# 类型推断
4# 智能类型转换
Kotlin 编译器会跟踪你的逻辑代码并在需要的时候进行自动的类型转换,这意味着我们不需要在显示转换时做更多的 instanceof 检查:
5# 更直观的相等性比较
你不再需要调用 equals(),因为 == 操作符也可以用来比较结构的相等性:
6# 默认参数值
不需要像 Java 那样定义很多包含不同参数的相似方法:
7# 命名参数
结合默认参数值,命名参数可以消除 builders 的使用:
8# When 表达式
9# Properties
可以给公共字段自定义 set 和 get 行为,这意味着不再会因为那些没用的 getters & setters 导致代码疯狂膨胀。
10# Data 类
**这是一个 POJO 类,包含 **toString(), equals(), hashCode(), 和 copy()方法,和 Java 不同的是,它不会超过 100 行代码:
11# 操作符重载
可以重载预定义的一组操作符来提升代码的可读性:
12# 解构声明
一些对象是可以解构的,一个很有用的例子就是对 Map 进行迭代:
13# Ranges
14# 扩展函数
还记得你第一次用 Java 实现一个 List 的排序吗?你找不到一个 sort() 函数,然后你就四处求助,最终找到了Collections.sort()。后来你需要将一个字符串的首字符变成大写,最终你还是自己写了一个方法来实现,因为你当时还不知道有这么个东西StringUtils.capitalize().
如果只有一种方法可以向已有的类添加新的函数,这样 IDE 就可以帮助你在代码完成时找到正确的函数。在 Kotlin 里你可以这么做:
Java 是我们应该称之为是一个几乎静态类型的编程语言。Java 的 String 变量类型无法保证它不会等于 null。尽管我们已经习惯了这样的情况,但它否定了静态类型检查的安全性,导致 Java 程序员总是活在各种空指针异常的恐惧中。
Kotlin 通过区分非空类型和允许为空类型来解决这个问题。类型默认是不允许为空的,可以通过在后面加一个 ? 问号来表示允许为空,例如:
Kotlin 强制你必须在访问一个可为空的类型变量时候必须确保不会发生空指针:
虽然看起来有点麻烦,但这的确是 Kotlin 一个微小却又非常重要的特性。我们仍可以使用智能的转换,可以在需要的时候将允许为空的类型转成不允许为空:
我们也可以使用安全调用方法?. 该表达式在 b 为空时返回 null,而不是抛出空指针异常:
安全调用可以链接在一起,以避免像其他语言一样存在大量嵌套的 if-not-null 检查,如果我们想要一个默认值而不是 null 时,可以用 ?: 操作符:
如果没有适合你的,那么你应该是需要一个空指针了,你将不得不显式的进行处理:
16# 更好的 Lambdas
嘿,帅哥,这是一个很好的 Lambda 系统 —— 在完美的可读性和简洁之间取得非常好的平衡,这得益于非常聪明的设计选择。其语法简单直接:
优点体现在:
-
如果 lambda 是方法的最后一个参数或者是唯一参数的话,那么方法的括号可以移动或者省略.
-
如果我们选择不去声明单参数的 lambda 表达式的参数,那么 Kotlin 会隐式的将之命名为 it.
结合上述优点,下面的三个不同的语句效果一样:
这个可以让你编写更加简洁的函数式代码,就像下面这样优雅:
Kotlin 的 lambda 系统和扩展函数结合,可以非常棒的用来开发各种 DSL。例如 Anko 这个 DSL 的例子可以增强 Android 的开发:
17# IDE 支持
如果你打算开始使用 Kotlin 开发项目,在工具上你会有很多的选择。但我强烈推荐使用 IntelliJ ,因为它自带 Kotlin 的支持 — 它的特点展示了同一组人设计的开发工具和语言时的优势。
如何学习kotlin?
需要我们去学习官网教程 或者 google 提供的快速学习的教程,当然这里只是快速浏览就行了,主要还是得靠实践,先熟悉基本的语法,然后找时间对语法进行了解,最后在实践开发中使用高阶特性。
官网教程-中文:https://www.kotlincn.net/docs/reference/
需要上述kotlin项目实战专题资料的朋友,++++维信,(壹叁贰零叁壹陆叁陆零玖)就可以免费领取了!
喜欢的朋友,别忘了关注Alvin老师+点赞!每日分享Android架构进阶知识!
网友评论