澳门新葡萄京官网首页 35

17 位谷歌 Android 开发专家是如何看待 Kotlin 的?

Google 已经多次表达过他们不反对 Kotlin
的使用,只要 Kotlin 编译器依然生成有效的字节码,那么 Google
就不会阻止任何人使用它。

译者简介:ASCE1885, 《Android 高级进阶》作者。

但很多人依然在等待官方的正式支持,一件可能永远不会发生的事情。

  • 微信公众号:asce1885
  • 小密圈:Android高级进阶,详情见这篇文章。
  • Github,简书,微博,CSDN 知乎

虽然我们等到了这一刻,但我想如果能够知道 Google 的 Android
开发专家是如何看待 Kotlin 的,那就更好了。

原文链接: 由于 Markdown
对图片的排版存在限制,因此为了保证排版的美观,本文对作者介绍部分进行截图,不做另外的翻译。

如果你没有听说过,那你应该了解下,Google
开发专家(GDEs)[1]是一个旨在表彰优秀开发者对所在领域所作出的贡献的项目。

澳门新葡萄京官网首页 1

我联系了一些这样的 Android 专家(人员列表很长!),我得到了来自 17
位的答复。非常感谢你们这么好能够花时间来回答。

Google 已经多次表达过他们不反对 Kotlin 的使用,只要 Kotlin
编译器依然生成有效的字节码,那么 Google 就不会阻止任何人使用它。

我只是要求他们告诉我们关于
Kotlin[澳门新葡萄京官网首页 ,2] 的一点想法,答案显然是未经过修改的,所以你可以发现支持和反对(或者不那么支持)的声音。

很多人依然在等待官方的正式支持,一件可能永远不会发生的事情。

我希望这有助于你知道 Kotlin
是如何成为一个游戏规则改变者的,同时如果你是一名 Android 开发者,我希望
Kotlin 会成为你考虑使用的一门语言。

虽然我们等到了这一刻,但我想如果能够知道 Google 的 Android
开发专家是如何看待 Kotlin 的
,那就更好了。

其他的就不多说的,让我们来看看 GDEs 们的看法吧,排名不分先后:

如果你没有听说过,那你应该了解下,Google
开发专家[1]是一个旨在表彰优秀开发者对所在领域所作出的贡献的项目。

1. Annyce Davis

澳门新葡萄京官网首页 2

我以前使用 Groovy 编程语言开发过 Grails 应用,对于我而言,Groovy 是对
Java 一个极大的改进。它很精简,并有助于避免当时使用 Java 6
语言编码时不得不遇到的很多样板代码。当 Kotlin
出现时,我立刻被它吸引了,因为它的很多语法特性让我想起了
Groovy。它既整洁又精炼。

我是一个狂热的学习者,所以我渴望学习 Kotlin 并基于 Kotlin Koans
开始我的学习之路。我也订购了《Kotlin in Action》的早期访问版本。当听了
Hadi 的 Kotlin 播客后,我被推到了正视 Kotlin 的边缘。当 Kotlin 1.1
发布后,我最终决定正视 Kotlin,并在我的线上应用中引入 Kotlin。

对于 Android 开发者而言,Kotlin
有很多优点。最明显的是它的类型系统和对空类型的处理,这迫使你在编码时指明哪些变量可为空,并在使用的时候遵循这个约定,之后编译器就会介入并确保对变量的赋值都是有效的。空指针异常[3]是我在
Android 应用程序中处理的最常见的异常类型。Kotlin 有助于公平的竞争环境。

Kotlin
另外一个显著的优点是具备扩展函数[4]的能力,通过给 ContextActivity 和 Date 类添加扩展函数,使得我的代码简洁了很多,同时变得更加易于阅读。

通过使用 Kotlin,我的代码变得更好了。

我联系了一些这样的 Android 专家,我得到了来自 17
位的答复。非常感谢你们这么好能够花时间来回答。

2. Sebastiano Poggi

澳门新葡萄京官网首页 3

我真的真的很喜欢这门语言。我个人认为它在很多情况下使得编码变成一件愉快的事情,相比之前,同样的情况下用
Java 语言编码将会感到痛苦和繁琐。我绝不是一个 Kotlin
专家,因为我还没有在日常工作中使用它,但每次做小项目时我都会使用它。你知道传说中的
10 倍效率的开发者吗?Kotlin 有时让我觉得自己就像一个 10
倍效率开发者(我一直不认为有人能够称为 10
倍效率的开发者,所以这对我来说是一个好的开始)。

简洁的语法是这门语言非常明显的好处,除此之外,我真的很感激它提供的所有附加的
API
和围绕它构建的生态系统。例如,不可变集合是我经常需要的东西,但如果不在应用中(部分)引入
Guava 函数库的话,在 Java 语言中是用不了的,但 Kotlin
对不可变集合提供了一级实现,此外还有一堆的其他特性。哦,我说过当看到
Kotlin的发布版本将对 LLVM 的支持作为一个目标时,我有多兴奋吗?

然而正如我刚才提到的,我的日常工作并没有使用 Kotlin。虽然有理由相信
Kotlin 的引入将会使项目大大受益,但这个项目却很难引入
Kotlin,因为这个项目的团队规模很大,我苦恼的发现 Kotlin
存在的主要问题:静态代码分析工具的缺乏和成熟设计模式的缺乏。

如果你的项目不大且不复杂,那么后者是一个相对次要的问题,但如果你遇到的是有十个开发者在一个有将近十年历史的巨大的代码仓库中协同工作时,具有良好的设计模式将会使你更加的安心。当然,你可以使用
Java 设计模式,但并不是所有的 Java 设计模式在 Kotlin
中都是有意义的,因为有些设计模式是专门围绕 Java
语言设计的,存在一定的局限性。这是一个漫长的讨论,我将在这里中止它,否则整篇文章就变成这个讨论了。

对我来说,前面提到的第一个问题是最关键的,也是真正决定我是否在项目中采用
Kotlin 的关键。你在项目实践中使用不了 PMD,Checkstyle,Findbugs
和其他的静态代码检查工具(还没有试过
Errorprone)的事实,将使你的项目陷入非常危险的处境。首先,如果项目中有超过
3~4
位开发者,你不能指望在代码风格上面能够严格监督;更重要的,你缺少很多从上述工具中获得的深入的
bug
检查功能。如果你从来没有(正确的)使用过静态代码检查工具,那么请举手,我当然不相信你!我知道现在有
IDE 的检查,但那些功能还远不够强大;也有几个项目为 Kotlin
带来了静态代码分析的能力,但它们还不值得让我们依赖。我真的很期待看到它们变得足够成熟,我们最终可以放心的使用它们。

在这期间,我在小的代码仓库上面使用 Kotlin,我喜欢它。

我只是要求他们告诉我们关于 Kotlin[2]
的一点想法,答案显然是未经过修改的,所以你可以发现支持和反对的声音。

3. Jorge Barroso

澳门新葡萄京官网首页 4

Kotlin 迈出了 Android 开发的一大步,在这之前,Android 缺少 Kotlin
所带来的特性,相比于其他的 Java 平台,Android 平台的 Java
开发有些过时,即使现在有在推动 Java
8,但它还是不会变成我们喜欢的现代编程语言。

现在我看到的一个最大的问题是它的推广,说服公司转型到 Kotlin
并展示它的价值很困难。对于技术型公司而言会相对简单,因为对于开发者来说是一个激励和挑战,但对于小公司来说更困难。此外,很多公司担心如果没有
Google 在背后支持 Kotlin 的话,将很难被广泛使用。

我喜欢这门语言以及它对生态系统的贡献,我希望能够在我的日常生活中更多地使用它,但我所从事的项目的性质不允许这样做。我鼓励大家都去看一下,但不限于
Kotlin,可能是另外一门语言,因为这会为他们打开一个新的视野,同时也是编写软件时非常有用的学习。

我希望这有助于你知道 Kotlin
是如何成为一个游戏规则改变者的
,同时如果你是一名 Android
开发者,我希望 Kotlin 会成为你考虑使用的一门语言。

4. Donn Felker

澳门新葡萄京官网首页 5

Kotlin 是极好的,我喜欢它,它是 Android 世界的一股清流。

其他的就不多说的,让我们来看看 GDEs 们的看法吧,排名不分先后:

5. Mark Allison

澳门新葡萄京官网首页 6

虽然我也很喜欢
Kotlin,但我不认为它已经足够成熟到能够在线上产品中使用。成熟模式和最佳实践的缺乏,使得
Kotlin 编写的代码可能难以维护。

从 Kotlin 缺乏静态代码分析工具可以看出来。虽然 Java
的静态代码分析工具不完美,但它们可以作为衡量技术债务的好指标。Java
工具不能用于 Kotlin,因为它们专门分析的是 Java 语言源码。

1. Annyce Davis

澳门新葡萄京官网首页 7MacHi
2017-05-29 21-18-37.png

我以前使用 Groovy 编程语言开发过 Grails 应用,对于我而言,Groovy 是对
Java 一个极大的改进。它很精简,并有助于避免当时使用 Java 6
语言编码时不得不遇到的很多样板代码。当 Kotlin
出现时,我立刻被它吸引了,因为它的很多语法特性让我想起了
Groovy。
它既整洁又精炼。

我是一个狂热的学习者,所以我渴望学习 Kotlin 并基于 Kotlin Koans
开始我的学习之路。我也订购了《Kotlin in Action》的早期访问版本。当听了
Hadi 的 Kotlin 播客后,我被推到了正视 Kotlin 的边缘。当 Kotlin 1.1
发布后,我最终决定正视 Kotlin,并在我的线上应用中引入 Kotlin。

对于 Android 开发者而言,Kotlin
有很多优点
。最明显的是它的类型系统和对空类型的处理,这迫使你在编码时指明哪些变量可为空,并在使用的时候遵循这个约定,之后编译器就会介入并确保对变量的赋值都是有效的。空指针异常[3]是我在
Android 应用程序中处理的最常见的异常类型。Kotlin
有助于公平的竞争环境。

Kotlin 另外一个显著的优点是具备扩展函数[4]的能力,通过给
ContextActivityDate
类添加扩展函数,使得我的代码简洁了很多,同时变得更加易于阅读。

通过使用 Kotlin,我的代码变得更好了。

6. Huyen Tue Dao

澳门新葡萄京官网首页 8

我完全迷上了 Kotlin。工作中我们 100% 的使用 Kotlin
进行编码,包含线上产品的代码。事实上,无论何时何地只要能够使用 Kotlin
的地方我都会使用 Kotlin 进行编码,归功于 Kotlin 和 Java
的可互操作性[5],几乎可以说任何地方都可以使用
Kotlin。我可以访问系统平台 API
和其他已经存在的代码和函数库,同时享受和利用 Kotlin
所带来的所有现代编程语言特性。

由于 Kotlin
是一门新语言,我们都在发现和定义最佳实践的过程中,我不得不同时从高级和低级两个层面仔细检查每一行代码的影响。这很有趣,迫使我更加谨慎和认真的作出某些决定。

这门语言的简洁令人惊叹。我喜欢
Android,但我们需要处理很多样板代码,Kotlin
有助于减少一些样板代码的编写。虽然太多的精简可能导致代码可读性的问题,我认为大多数时候 Kotlin
实际上提高了代码可读性,只要我们不要太疯狂,并记住我们想要什么样的最佳实践。

2. Sebastiano Poggi

澳门新葡萄京官网首页 9MacHi
2017-05-30 20-34-13.png

我真的真的很喜欢这门语言。我个人认为它在很多情况下使得编码变成一件愉快的事情,相比之前,同样的情况下用
Java 语言编码将会感到痛苦和繁琐。我绝不是一个 Kotlin
专家,因为我还没有在日常工作中使用它,但每次做小项目时我都会使用它。你知道传说中的
10 倍效率的开发者吗?Kotlin 有时让我觉得自己就像一个 10
倍效率开发者
(我一直不认为有人能够称为 10
倍效率的开发者,所以这对我来说是一个好的开始)。

简洁的语法是这门语言非常明显的好处,除此之外,我真的很感激它提供的所有附加的
API
和围绕它构建的生态系统
。例如,不可变集合是我经常需要的东西,但如果不在应用中引入
Guava 函数库的话,在 Java 语言中是用不了的,但 Kotlin
对不可变集合提供了一级实现,此外还有一堆的其他特性。哦,我说过当看到
Kotlin的发布版本将对 LLVM 的支持作为一个目标时,我有多兴奋吗?

然而正如我刚才提到的,我的日常工作并没有使用 Kotlin。虽然有理由相信
Kotlin 的引入将会使项目大大受益,但这个项目却很难引入
Kotlin,因为这个项目的团队规模很大,我苦恼的发现 Kotlin
存在的主要问题:静态代码分析工具的缺乏和成熟设计模式的缺乏

如果你的项目不大且不复杂,那么后者是一个相对次要的问题,但如果你遇到的是有十个开发者在一个有将近十年历史的巨大的代码仓库中协同工作时,具有良好的设计模式将会使你更加的安心。当然,你可以使用
Java 设计模式,但并不是所有的 Java 设计模式在 Kotlin
中都是有意义的
,因为有些设计模式是专门围绕 Java
语言设计的,存在一定的局限性。这是一个漫长的讨论,我将在这里中止它,否则整篇文章就变成这个讨论了😀。

对我来说,前面提到的第一个问题是最关键的,也是真正决定我是否在项目中采用
Kotlin 的关键。你在项目实践中使用不了 PMD,Checkstyle,Findbugs
和其他的静态代码检查工具(还没有试过
Errorprone)的事实,将使你的项目陷入非常危险的处境。首先,如果项目中有超过
3~4
位开发者,你不能指望在代码风格上面能够严格监督;更重要的,你缺少很多从上述工具中获得的深入的
bug
检查功能。如果你从来没有使用过静态代码检查工具,那么请举手,我当然不相信你!我知道现在有
IDE 的检查,但那些功能还远不够强大;也有几个项目为 Kotlin
带来了静态代码分析的能力,但它们还不值得让我们依赖。我真的很期待看到它们变得足够成熟,我们最终可以放心的使用它们。

在这期间,我在小的代码仓库上面使用 Kotlin,我喜欢它🙂。

7. Dmytro Danylyk

澳门新葡萄京官网首页 10

对于那些停留在 Android 世界的开发者而言,Kotlin
是一个真正的规则改变者,它拥有很多我喜欢的特性:空类型安全,data
classes[6],属性和懒加载属性,扩展函数,协程,不变性等等。

我很享受使用 Koltin
来编码,因为我没有必要在项目中引入太多的第三方库,Kotlin
已经非常好的提供了大部分的支持。

归功于 JetBrains,Kotlin 有很棒的 IDE
支持以及非常多的学习资料,甚至有在线的 REPL[7]。

3. Jorge Barroso

澳门新葡萄京官网首页 11MacHi
2017-05-30 20-35-12.png

Kotlin 迈出了 Android 开发的一大步,在这之前,Android 缺少 Kotlin
所带来的特性,相比于其他的 Java 平台,Android 平台的 Java
开发有些过时,即使现在有在推动 Java
8,但它还是不会变成我们喜欢的现代编程语言。

现在我看到的一个最大的问题是它的推广,说服公司转型到 Kotlin
并展示它的价值很困难。对于技术型公司而言会相对简单,因为对于开发者来说是一个激励和挑战,但对于小公司来说更困难。此外,很多公司担心如果没有
Google 在背后支持 Kotlin 的话,将很难被广泛使用。

我喜欢这门语言以及它对生态系统的贡献,我希望能够在我的日常生活中更多地使用它,但我所从事的项目的性质不允许这样做。我鼓励大家都去看一下,但不限于
Kotlin,可能是另外一门语言,因为这会为他们打开一个新的视野,同时也是编写软件时非常有用的学习。

8. Anup Cowkur

澳门新葡萄京官网首页 12

我曾经使用过像 Haskell 和 Elixir 这样的语言进行编码,因此当我进行
Android 开发时时常在想:“为什么 Android 中不能有这样好用的特性?”。

现在使用 Kotlin,我们可以做到了。

可选类型内置在 Kotlin
的类型系统中,函数是一级公民,类型匹配(某种程度上)和不可变类型等特性终于让我在
Android 开发中可以使用真正的函数式编程。

4. Donn Felker

澳门新葡萄京官网首页 13MacHi
2017-05-30 20-37-01.png

Kotlin 是极好的,我喜欢它,它是 Android 世界的一股清流

9. David Vávra

澳门新葡萄京官网首页 14

在我的主要应用(Settle Up[8])的生产环境中我使用了
Kotlin,它已经足够成熟,而且相比 Java(任何版本)
有很多的优点[9]。Kotlin 完全兼容现有的 Java
工具和函数库,同时能够很好的在 Android Studio 中使用。

如果现在新创建一个 APP[10],我肯定会选择
Kotlin。最常见的反面论点是:“但是还不熟悉 Kotlin
的同事会抱怨而且会降低开发效率”。这一点我是不同意的,从 Java 转到 Kotlin
真的不需要费多大劲,而它的优点会很快呈现出来。相比之下,刚开始使用
RxJava 将会感觉困难得多。

对于移植现有 APP 而言,是否使用 Kotlin
需要根据具体情况而定。例如你可以只在一个页面使用 Kotlin,但如果想 100%
发挥这门语言的优点,那最好是全面转到
Kotlin。当然这一点我们很难向项目负责人去证明。

Kotlin 现在唯一需要的仅仅是 Google 的官方认可,Google
不需要做其他任何事情,只需要在官方文档中增加 Kotlin 版本的代码片段(像对
Swift/ObjectiveC 所做的那样)。如果官方认可 Kotlin,那么我们将会看到
Koltin 成为大部分人的主要选择,祈求在今年的 Google I/O 大会上变成现实。

5. Mark Allison

澳门新葡萄京官网首页 15MacHi
2017-05-30 20-38-21.png

虽然我也很喜欢
Kotlin,但我不认为它已经足够成熟到能够在线上产品中使用。成熟模式和最佳实践的缺乏,使得
Kotlin 编写的代码可能难以维护。

Kotlin 缺乏静态代码分析工具可以看出来。虽然 Java
的静态代码分析工具不完美,但它们可以作为衡量技术债务的好指标。Java
工具不能用于 Kotlin,因为它们专门分析的是 Java 语言源码。

10. César Valiente

澳门新葡萄京官网首页 16

我认为 Kotlin 是一门非常棒的现代编程语言。

它的学习曲线很平缓,你可能只需要花一天时间来学习它的语法,就可以用
Kotlin 写出一些代码,实现某些功能。Kotlin
写起来真的很过瘾,很好玩,而且很简洁,它具备其他现代语言的特性,它由
JetBrains
这样很专业的团队进行持续的开发,同时一直有社区的支持,因为它是开源的!

这里我不想花时间介绍 Kotlin
的那些解放开发者的特性,因为官方文档已经做了很好的说明,同时我们可以在
IDE 或者 Web 页面中使用 Koans[11] 来进行练习,Kotlin
社区也在不断的发布者新的激动人心的内容。

在 Android 平台,Kotlin 给我们 Android
开发者带来一股清流,给了我们一个新的理由来享受编写 APP,使用 Kotlin
你可以编写更少的代码,最重要的是在一天结束时,你的代码可读性更强,样板代码更少,而且由于编写同样的代码所花费的时间更少,你将变得更有生产力,正如我前面说过的,使用
Kotlin 你会很开心!

至少在 Android 社区,有一个问题悬而未决:kotlin
已经准备好应用在线上产品了吗?我的回答是当然,JetBrains 去年就已经发布
1.0 的稳定版本。

你觉得如果没有为线上产品准备好的话 JetBrains
的聪明家伙们会正式发布它吗?当然不会。Kotlin 已经用在了 JetBrains
的一些产品中,其他公认的伟大的公司也在线上产品中使用了 Kotlin。

好的,一切听起来不错,但应该也有一些不好的地方吧?没错,Kotlin
社区等待的事情之一是工具的支持。当你在一个团队工作时,静态代码分析工具是非常重要的。在
Kotlin 中我们仍然有所欠缺,当然你可以对 Kotlin
工程进行构建,运行测试等,这些基础的功能还是有的,但像
CheckStyle,PMD,FindBugs 之类的支持 Java 语言的工具非常重要,在 Kotlin
中还不支持(好吧,在 IntelliJ 中内置支持代码分析,但这是不够的)。

所以,如果你在一个大团队中工作,静态分析工具在你的日常工作中是非常重要的(理应如此),你需要对这一点多加考虑。如果你在一个小团队中工作,那么你可以控制所有事情的发展(译者注:包括使用
Kotlin)。

总的来说,Kotlin 是伟大的,使用 Kotlin
你将会拥有更多乐趣,同时工作也更高效(至少比用 Java 开发 Android
强),虽然还有关于静态代码分析工具的一些问题,但如果你能够不使用这些工具,那么去尝试
Kotlin 吧,你会爱上它的!

6. Huyen Tue Dao

澳门新葡萄京官网首页 17MacHi
2017-05-30 20-40-43.png

我完全迷上了 Kotlin。工作中我们 100% 的使用 Kotlin
进行编码,包含线上产品的代码。事实上,无论何时何地只要能够使用
Kotlin 的地方我都会使用 Kotlin 进行编码,归功于 Kotlin 和 Java
的可互操作性[5],几乎可以说任何地方都可以使用
Kotlin。我可以访问系统平台 API
和其他已经存在的代码和函数库,同时享受和利用 Kotlin
所带来的所有现代编程语言特性。

由于 Kotlin
是一门新语言,我们都在发现和定义最佳实践的过程中,我不得不同时从高级和低级两个层面仔细检查每一行代码的影响。这很有趣,迫使我更加谨慎和认真的作出某些决定。

这门语言的简洁令人惊叹。我喜欢
Android,但我们需要处理很多样板代码,Kotlin
有助于减少一些样板代码的编写。虽然太多的精简可能导致代码可读性的问题,我认为大多数时候
Kotlin
实际上提高了代码可读性
,只要我们不要太疯狂,并记住我们想要什么样的最佳实践。

11. Nelson Glauber

澳门新葡萄京官网首页 18

Kotlin 是一门令人印象深刻的语言,该语言的特性是惊人的,它移除了 Java
语言所需的一堆样板代码。更不用说市面上绝大多数函数库(用 Java
语言编写)完全兼容 Kotlin 的事实。另外一个使得该语言易于采用的是它和
Android Studio 的完美和稳定的兼容。

对于 Java/Android
开发者(新手可能未必如此)而言学习曲线很缓和。我从去年开始通过阅读
Antonio 的书[12](顺便说一句,这本书很棒)来学习
Kotlin,从那以后,我一直在我的个人项目和演讲中使用这门语言。

不幸的是,我还没有机会在线上产品中使用它,但我毫不怀疑 Kotlin
已经成熟到足以在大型项目中有效的使用。

在我看来,不使用 Kotlin 的唯一理由是,一旦你开始用 Kotlin
进行编码,你将不想再使用 Java 进行编码。

7. Dmytro Danylyk

澳门新葡萄京官网首页 19MacHi
2017-05-30 20-30-19.png

对于那些停留在 Android 世界的开发者而言,Kotlin
是一个真正的规则改变者
,它拥有很多我喜欢的特性:空类型安全,data
classes[6],属性和懒加载属性,扩展函数,协程,不变性等等。

我很享受使用 Koltin
来编码,因为我没有必要在项目中引入太多的第三方库,Kotlin
已经非常好的提供了大部分的支持。

归功于 JetBrains,Kotlin 有很棒的 IDE
支持
以及非常多的学习资料,甚至有在线的 REPL[7]。

12. Ryan Harter

澳门新葡萄京官网首页 20

大约一年前,我开始用 Kotlin
来编写所有的新代码,经过一些尝试,我发现它是稳定的,而且这门语言提供的若干特性所带来的好处值得我做这样的转换。归功于
Kotlin 和 Java 的可互操作性,任何我用 Kotlin
还不知道怎么实现的功能,我可以回退到使用 Java 来实现。

Kotlin
的扩展函数语言特性最大程度上简化了我的工作流程,虽然这个特性很简单。在我的图形相关工作中,需要做大量的数学和矩阵操作,也就是会用到很多工具类。扩展函数[13]极大的简化了代码的编写,并使代码更加的精炼。在原有的面向对象编程的基础上,混合着对函数式编程的支持,使得工作更加的愉快。

对于正在考虑切换到 Kotlin 的开发者,我的最大建议是记住 Kotlin 和 Java
并不是非此则彼的关系,相反,Kotlin 能够很好的和现有的 Java
代码协同工作,所以你可以一步一步的开始尝试使用 Kotlin。

8. Anup Cowkur

澳门新葡萄京官网首页 21MacHi
2017-05-30 20-31-26.png

我曾经使用过像 Haskell 和 Elixir 这样的语言进行编码,因此当我进行
Android 开发时时常在想:“为什么 Android 中不能有这样好用的特性?”。

现在使用 Kotlin,我们可以做到了。

可选类型内置在 Kotlin
的类型系统中,函数是一级公民,类型匹配和不可变类型等特性终于让我在
Android 开发中可以使用真正的函数式编程

13. Ubiratan Soares

澳门新葡萄京官网首页 22

从一个开发者的经验来看,Kotlin 是 Android 应用开发的未来。

Kotlin 对 Android 开发的影响和三年前 Grade 对 Android
的影响非常相似。作为 Android 开发者社区,我们应该拥抱 Kotlin,传播
Kotlin,并让一大批的开发者来使用
Kotlin,因为我们值得拥有更好的方法来开发
APP,满足用户的需要并在工作中取得好成绩。

9. David Vávra

澳门新葡萄京官网首页 23MacHi
2017-05-30 20-31-50.png

在我的主要应用(Settle Up[8])的生产环境中我使用了
Kotlin
,它已经足够成熟,而且相比 Java 有很多的优点[9]。Kotlin
完全兼容现有的 Java 工具和函数库,同时能够很好的在 Android Studio
中使用。

如果现在新创建一个 APP[10],我肯定会选择
Kotlin
。最常见的反面论点是:“但是还不熟悉 Kotlin
的同事会抱怨而且会降低开发效率”。这一点我是不同意的,从 Java 转到
Kotlin
真的不需要费多大劲
,而它的优点会很快呈现出来。相比之下,刚开始使用
RxJava 将会感觉困难得多。

对于移植现有 APP 而言,是否使用 Kotlin
需要根据具体情况而定。例如你可以只在一个页面使用 Kotlin,但如果想
100% 发挥这门语言的优点,那最好是全面转到
Kotlin。当然这一点我们很难向项目负责人去证明。

Kotlin 现在唯一需要的仅仅是 Google 的官方认可,Google
不需要做其他任何事情,只需要在官方文档中增加 Kotlin 版本的代码片段(像对
Swift/ObjectiveC 所做的那样)。如果官方认可 Kotlin,那么我们将会看到
Koltin 成为大部分人的主要选择,祈求在今年的 Google I/O 大会上变成现实。

14. Philippe Breault

澳门新葡萄京官网首页 24

Kotlin 对于 Android 开发者而言是一股清流。

我喜欢它在 lambda 表达式上所做的工作,能够让编译器内联
lambda,当它起作用时,允许我们 Android
开发者在紧凑循环中使用它,这样通常可以避免实例化新对象。

简单的特性当然也很重要,例如表达式后面不需要加分号;如果在同一行给一个变量赋值时不需要输入两次变量的类型;使用属性来代替
getters/setters 方法等等。这些特性使得代码阅读更方便。

我唯一希望得到改进的功能是 Android Gradle 插件和 Kotlin
插件的可互操作性。现阶段,两者的混合使用经常会出现问题。

话虽如此,每个 Android
开发者都应该对这门语言保持关注,最好是尝试使用它。

10. César Valiente

澳门新葡萄京官网首页 25MacHi
2017-05-30 20-32-23.png

我认为 Kotlin 是一门非常棒的现代编程语言

它的学习曲线很平缓,你可能只需要花一天时间来学习它的语法,就可以用
Kotlin 写出一些代码,实现某些功能。Kotlin
写起来真的很过瘾,很好玩,而且很简洁,它具备其他现代语言的特性
,它由
JetBrains
这样很专业的团队进行持续的开发,同时一直有社区的支持,因为它是开源的

这里我不想花时间介绍 Kotlin
的那些解放开发者的特性,因为官方文档已经做了很好的说明,同时我们可以在
IDE 或者 Web 页面中使用 Koans[11] 来进行练习,Kotlin
社区也在不断的发布者新的激动人心的内容

在 Android 平台,Kotlin 给我们 Android
开发者带来一股清流,给了我们一个新的理由来享受编写 APP,使用 Kotlin
你可以编写更少的代码
,最重要的是在一天结束时,你的代码可读性更强,样板代码更少,而且由于编写同样的代码所花费的时间更少,你将变得更有生产力,正如我前面说过的,使用
Kotlin 你会很开心!

至少在 Android 社区,有一个问题悬而未决:kotlin
已经准备好应用在线上产品了吗?我的回答是当然,JetBrains
去年就已经发布 1.0 的稳定版本。

你觉得如果没有为线上产品准备好的话 JetBrains
的聪明家伙们会正式发布它吗?当然不会。Kotlin 已经用在了 JetBrains
的一些产品中
,其他公认的伟大的公司也在线上产品中使用了 Kotlin。

好的,一切听起来不错,但应该也有一些不好的地方吧?没错,Kotlin
社区等待的事情之一是工具的支持
。当你在一个团队工作时,静态代码分析工具是非常重要的。在
Kotlin 中我们仍然有所欠缺,当然你可以对 Kotlin
工程进行构建,运行测试等,这些基础的功能还是有的,但像
CheckStyle,PMD,FindBugs 之类的支持 Java 语言的工具非常重要,在 Kotlin
中还不支持(好吧,在 IntelliJ 中内置支持代码分析,但这是不够的)。

所以,如果你在一个大团队中工作,静态分析工具在你的日常工作中是非常重要的,你需要对这一点多加考虑。如果你在一个小团队中工作,那么你可以控制所有事情的发展(译者注:包括使用
Kotlin)。

总的来说,Kotlin 是伟大的,使用 Kotlin
你将会拥有更多乐趣,同时工作也更高效(至少比用 Java 开发 Android
强),虽然还有关于静态代码分析工具的一些问题,但如果你能够不使用这些工具,那么去尝试
Kotlin 吧,你会爱上它的!😉

15. Iñaki Villar

澳门新葡萄京官网首页 26

Kotlin 为 Android
平台带来了新酷的概念,而不仅仅是使用另外一门语言来编写类和 activities。

我们此时正在将自动化框架移植到 Kotlin
上,我们正在享受如何用声明的方式定义自己的
DSL,并让开发和测试人员更流畅的编程测试代码[14]。

11. Nelson Glauber

澳门新葡萄京官网首页 27MacHi
2017-05-30 20-41-30.png

Kotlin 是一门令人印象深刻的语言,该语言的特性是惊人的,它移除了 Java
语言所需的一堆样板代码。更不用说市面上绝大多数函数库(用 Java
语言编写)完全兼容 Kotlin 的事实。另外一个使得该语言易于采用的是它和
Android Studio 的完美和稳定的兼容。

对于 Java/Android 开发者而言学习曲线很缓和。我从去年开始通过阅读
Antonio 的书[12](顺便说一句,这本书很棒)来学习
Kotlin,从那以后,我一直在我的个人项目和演讲中使用这门语言。

不幸的是,我还没有机会在线上产品中使用它,但我毫不怀疑 Kotlin
已经成熟到足以在大型项目中有效的使用

在我看来,不使用 Kotlin 的唯一理由是,一旦你开始用 Kotlin
进行编码,你将不想再使用 Java 进行编码
🙂。

16. Dan Lew

澳门新葡萄京官网首页 28

在不牺牲性能或者安全性的前提下,Kotlin 相比 Java
能够编写更加简洁易懂的代码。Kotlin 最终编译为字节码,因此能够表现的跟
Java 一样好,它跟 Java 有一样的编译时检查(同时具备 Java
没有的内建空类型检查)。更重要的,Kotlin
的语言特性和标准库函数能够编写简洁有效的代码。

此外,Kotlin 拥有强大的生态系统。当然,来自 JetBrains
的原生工具支持是不错的,除此之外,这门语言正得到积极的支持和改进,同时,JetBrains
在每次升级 Kotlin 时并没有做不兼容的修改。而且 Kotlin 可以和 Java
很好的相互协作,这使得从 Java 到 Kotlin 的转变很容易。

最后,作为一个 Android 开发者,我喜欢 Kotlin
还有另外一个重要的原因:Kotlin 能够独立于 Android 系统版本进行升级。由于
Java 语言的能力是和 Android 操作系统绑定的,开发者经常会错过 Java
新版本的语言特性和标准库 API。相比之下,当 Kotlin
新版本发布时,你就可以开始使用新版本的语言特性了。

12. Ryan Harter

澳门新葡萄京官网首页 29MacHi
2017-05-29 16-27-07.png

大约一年前,我开始用 Kotlin
来编写所有的新代码,经过一些尝试,我发现它是稳定的,而且这门语言提供的若干特性所带来的好处值得我做这样的转换。归功于
Kotlin 和 Java 的可互操作性,任何我用 Kotlin
还不知道怎么实现的功能,我可以回退到使用 Java 来实现。

Kotlin
的扩展函数语言特性最大程度上简化了我的工作流程,虽然这个特性很简单。在我的图形相关工作中,需要做大量的数学和矩阵操作,也就是会用到很多工具类。扩展函数[13]极大的简化了代码的编写,并使代码更加的精炼。在原有的面向对象编程的基础上,混合着对函数式编程的支持,使得工作更加的愉快。

对于正在考虑切换到 Kotlin 的开发者,我的最大建议是记住 Kotlin 和 Java
并不是非此则彼的关系
,相反,Kotlin 能够很好的和现有的 Java
代码协同工作,所以你可以一步一步的开始尝试使用 Kotlin。

17. Enrique López Mañas

澳门新葡萄京官网首页 30

我是作为一名 Java 开发者自然而然的过渡到 Android
开发的,因为两者语言是通用的,所以我决定试一下,这是一个充满意义的选择,就我个人而言,这一年是在
2009 年。Java 诞生于 1995
年,从那时起到现在,陆续发布了一些新版本,在原有语言特性的基础上进行新增和改进,当前的版本是
Java 8。Java 是 22 年前设计的,考虑到技术发展的速度,Java
算是一门不朽的语言,同时目前它也有一些不容忽视的缺点。作为一个开发者,我经常会尝试其他语言。最明显的解决了
Java 某些缺点的语言是 Scala。转折点是我在实践中看到了像 Swift
这样的语言。我也在为 iOS 平台编写代码,并注意到 Swift
是如何克服像空类型这样的具有明显缺点的语言特性的,从此打开我在 Java
语言中一直以来忽略的很多问题。

由于最初设计等本质原因,Android 平台原生支持所有 Java 7
的语言特性,部分支持 Java 8 语言特性。相当于 Android 平台跟其他使用 Java
语言的平台相比,落后了很多。而 Kotlin 的出现填补了这个空缺。

Kotlin 是一门现代编程语言(1.0 版本是在 2016 年 2
月发布的)。它最初的目标是弥补 Java 的缺点,像 Scala
语言所做的那样,但解决了一些存在的问题(例如,编译时间)。

JetBrains 对 Kotlin 作了了不起的优化工作,在最近一个版本中 Kotlin
的编译时间得到了显著的提升。作为一个 Kotlin
新手,下面是最初我想到的一些问题的答案:

  • 和 Java 的可互操作性:Kotlin 可以直接和 Java
    类进行交互,当然也有其他方式。最基础的一点:我确实想重用老的代码仓库,并引入
    Kotlin。
  • 转换工具:虽然不能盲目的信任 Java 到 Kotlin
    的自动转换,但这个功能确实很棒。当我将 Java 类转换为 Kotlin
    类时,我可以很容易的复用 60%~70%
    的结果代码。我的做法是不要一次性将整个代码库从 Java 转换为
    Kotlin,而是遵循小步迭代。这样审查转换后的代码所花的时间也会很少。

回到 Kotlin 本身,在使用 Java 进行多年的开发后,尝试使用 Kotlin
这种新鲜东西感觉很棒。如果你是一名 Java 开发者,Kotlin
的语法对你而言是非常自然的。如果你是一名 Swift
开发者,也会有同样的感觉,而且你会很容易理解 Kotlin
的一些关键概念例如空类型。Kotlin 其他吸引我注意的特性如下:

  • 空类型:告诉你公司的业务人员你可以避免产品中三分之二的异常,这将是一件令人心动的事情。直到开始使用
    Kotlin,你才意识到在 Java 中没有空类型是多么糟糕的一件事情。
  • 函数式编程:是的,Kotlin 正如 Scala 一样,支持函数式编程。
  • 默认和命名参数:再次的,如果你之前没有尝试过这种特性,你将永远不会知道它的可贵之处。在
    Kotlin
    中,你可以为一个函数的参数设置默认值,并为每个参数命名。这成倍的增加代码的可读性和易读性。
  • 智能的强制转换:厌倦了使用 instanceof 进行类型判断然后进行类型转换吧?它似乎总是非常多余的步骤,本应该很容易防止的。Kotlin
    自动为你实现这些步骤。

Koltin
还有一堆的特性,可能需要几篇文章的篇幅来进行列举和深入介绍。总结来说:Koltin
是一门用于补充和完善 Java 不足的语言。对于 Java
开发者而言学习曲线很平缓。这不是一个非此即彼的问题,因为你可以在你的
Java 代码仓库中同时使用 Java 和 Kotlin。Kotlin
将会提高您的工作效率,从中长期来看,它将使你成为一名更好的程序员。

[1]:

[2]:

[3]:

[4]:

[5]:

[6]:

[7]:

[8]:

[9]:

[10]:

[11]:

[12]:

[13]:

[14]:

13. Ubiratan Soares

澳门新葡萄京官网首页 31MacHi
2017-05-29 14-30-30.png

从一个开发者的经验来看,Kotlin 是 Android 应用开发的未来

Kotlin 对 Android 开发的影响和三年前 Grade 对 Android
的影响非常相似
。作为 Android 开发者社区,我们应该拥抱 Kotlin,传播
Kotlin,并让一大批的开发者来使用
Kotlin,因为我们值得拥有更好的方法来开发
APP,满足用户的需要并在工作中取得好成绩。

14. Philippe Breault

澳门新葡萄京官网首页 32MacHi
2017-05-29 17-52-11.png

Kotlin 对于 Android 开发者而言是一股清流

我喜欢它在 lambda 表达式上所做的工作,能够让编译器内联
lambda,当它起作用时,允许我们 Android
开发者在紧凑循环中使用它,这样通常可以避免实例化新对象。

简单的特性当然也很重要,例如表达式后面不需要加分号;如果在同一行给一个变量赋值时不需要输入两次变量的类型;使用属性来代替
getters/setters 方法等等。这些特性使得代码阅读更方便

唯一希望得到改进的功能是 Android Gradle 插件和 Kotlin
插件的可互操作性
。现阶段,两者的混合使用经常会出现问题。

话虽如此,每个 Android
开发者都应该对这门语言保持关注
,最好是尝试使用它。

15. Iñaki Villar

澳门新葡萄京官网首页 33MacHi
2017-05-29 18-27-28.png

Kotlin 为 Android
平台带来了新酷的概念
,而不仅仅是使用另外一门语言来编写类和
activities。

我们此时正在将自动化框架移植到 Kotlin
,我们正在享受如何用声明的方式定义自己的
DSL,并让开发和测试人员更流畅的编程测试代码[14]。

16. Dan Lew

澳门新葡萄京官网首页 34MacHi
2017-05-29 18-33-52.png

在不牺牲性能或者安全性的前提下,Kotlin 相比 Java
能够编写更加简洁易懂的代码
。Kotlin 最终编译为字节码,因此能够表现的跟
Java 一样好,它跟 Java 有一样的编译时检查(同时具备 Java
没有的内建空类型检查)。更重要的,Kotlin
的语言特性和标准库函数能够编写简洁有效的代码。

此外,Kotlin 拥有强大的生态系统。当然,来自 JetBrains
的原生工具支持是不错的,除此之外,这门语言正得到积极的支持和改进,同时,JetBrains
在每次升级 Kotlin 时并没有做不兼容的修改。而且 Kotlin 可以和 Java
很好的相互协作,这使得从 Java 到 Kotlin 的转变很容易。

最后,作为一个 Android 开发者,我喜欢 Kotlin
还有另外一个重要的原因:Kotlin 能够独立于 Android
系统版本进行升级
。由于 Java 语言的能力是和 Android
操作系统绑定的,开发者经常会错过 Java 新版本的语言特性和标准库
API。相比之下,当 Kotlin
新版本发布时,你就可以开始使用新版本的语言特性了。

17. Enrique López Mañas

澳门新葡萄京官网首页 35MacHi
2017-05-29 18-59-34.png

我是作为一名 Java 开发者自然而然的过渡到 Android
开发的,因为两者语言是通用的,所以我决定试一下,这是一个充满意义的选择,就我个人而言,这一年是在
2009 年。Java 诞生于 1995
年,从那时起到现在,陆续发布了一些新版本,在原有语言特性的基础上进行新增和改进,当前的版本是
Java 8。Java 是 22 年前设计的,考虑到技术发展的速度,Java
算是一门不朽的语言
,同时目前它也有一些不容忽视的缺点。作为一个开发者,我经常会尝试其他语言。最明显的解决了
Java 某些缺点的语言是 Scala。转折点是我在实践中看到了像 Swift
这样的语言。我也在为 iOS 平台编写代码,并注意到 Swift
是如何克服像空类型这样的具有明显缺点的语言特性的,从此打开我在 Java
语言中一直以来忽略的很多问题。

由于最初设计等本质原因,Android 平台原生支持所有 Java 7
的语言特性,部分支持 Java 8 语言特性。相当于 Android 平台跟其他使用 Java
语言的平台相比,落后了很多。而 Kotlin 的出现填补了这个空缺。

Kotlin 是一门现代编程语言(1.0 版本是在 2016 年 2
月发布的)。它最初的目标是弥补 Java 的缺点,像 Scala
语言所做的那样,但解决了一些存在的问题。

JetBrains 对 Kotlin 作了了不起的优化工作,在最近一个版本中 Kotlin
的编译时间得到了显著的提升。作为一个 Kotlin
新手,下面是最初我想到的一些问题的答案:

  • 和 Java 的可互操作性:Kotlin 可以直接和 Java
    类进行交互,当然也有其他方式
    。最基础的一点:我确实想重用老的代码仓库,并引入
    Kotlin。
  • 转换工具:虽然不能盲目的信任 Java 到 Kotlin
    的自动转换,但这个功能确实很棒。当我将 Java 类转换为 Kotlin
    类时,我可以很容易的复用 60%~70%
    的结果代码。我的做法是不要一次性将整个代码库从 Java 转换为
    Kotlin,而是遵循小步迭代。这样审查转换后的代码所花的时间也会很少。

回到 Kotlin 本身,在使用 Java 进行多年的开发后,尝试使用 Kotlin
这种新鲜东西感觉很棒。如果你是一名 Java 开发者,Kotlin
的语法对你而言是非常自然的
。如果你是一名 Swift
开发者,也会有同样的感觉,而且你会很容易理解 Kotlin
的一些关键概念例如空类型。Kotlin 其他吸引我注意的特性如下:

  • 空类型:告诉你公司的业务人员你可以避免产品中三分之二的异常,这将是一件令人心动的事情。直到开始使用
    Kotlin,你才意识到在 Java 中没有空类型是多么糟糕的一件事情。
  • 函数式编程:是的,Kotlin 正如 Scala 一样,支持函数式编程。
  • 默认和命名参数:再次的,如果你之前没有尝试过这种特性,你将永远不会知道它的可贵之处。
    Kotlin
    中,你可以为一个函数的参数设置默认值
    ,并为每个参数命名。这成倍的增加代码的可读性和易读性。
  • 智能的强制转换:厌倦了使用 instanceof
    进行类型判断然后进行类型转换吧?它似乎总是非常多余的步骤,本应该很容易防止的。Kotlin
    自动为你实现这些步骤。

Koltin
还有一堆的特性,可能需要几篇文章的篇幅来进行列举和深入介绍。总结来说:Koltin
是一门用于补充和完善 Java 不足的语言。对于 Java
开发者而言学习曲线很平缓。这不是一个非此即彼的问题,因为你可以在你的
Java 代码仓库中同时使用 Java 和 Kotlin。Kotlin
将会提高您的工作效率,从中长期来看,它将使你成为一名更好的程序员。

发表评论

电子邮件地址不会被公开。 必填项已用*标注