20位java专家怎么看待kotlin java混合编码的文章

【Kotlin喧嚣过后,谈谈Java程序员未来的出路】 - 联盟推荐_【北京联盟】
Kotlin喧嚣过后,谈谈Java程序员未来的出路
/ 作者:小易
北京联盟摘要:【Kotlin喧嚣过后,谈谈Java程序员未来的出路】上一篇:
下一篇: 。自从谷歌 I/O 2017宣布将支持 Kotlin 作为 Android 开发的 First-Class 语言,各种 Kotlin 能否取代 Java 的文章、争论层出不穷。 作为一名老 Java 程序员,心态是比较复杂的,虽然类似场面见过不少。 早在 2009 年,就有了 Scala 是否是 Java 后继者的争论
自从谷歌 I/O 2017宣布将支持 Kotlin 作为 Android 开发的 First-Class 语言,各种 Kotlin 能否取代 Java 的文章、争论层出不穷。作为一名老 Java 程序员,心态是比较复杂的,虽然类似场面见过不少。早在 2009 年,就有了 Scala 是否是 Java 后继者的争论。2009年7月 InfoQ 发表的一篇文章:「Roundup: Scala as the long term replacement for Java」,还谈到了 Java 之父 James Gosling 也偏爱 Scala 。(参考下图)尽管 Scala 在业界的口碑不错,还受到不少自命极客的程序猿的拥趸。在 Java 程序员当中,也掀起了一阵学习 Scala 的风潮。但时至今日,取代 Java,还远远谈不上。Java 从诞生到现在,已有22年的。Java 在业界的霸主地位,虽然这些年一直受到 C/C++ 、Node.js 、GO 、Python 等语言的挑战,但一直稳如泰山。在众多领域的普及率、Java 不是榜首,也是名列前茅。下图是 2017年5月 的 TIOBE 编程语言排行榜Java 依然是遥遥领先,不过相比较去年同期,Java 下降了 6.32% 。Java 的普及率从 2016年年初以来一直呈下降趋势,Java 程序员的未来之路该如何走,还是值得思考一下。懂得居安思危、未雨绸缪,未来的运气才不会太差。Java 生态圈Java 的生态环境开放、自由,在Sun/Oracle、Google、Apache、Eclipse基金会等各大厂商,还有技术大牛的共同努力下,Java 的生态圈异常繁荣,各种优秀的开源框架层出不穷。Spring BootSpring Boot 是 Pivotal 团队推出的一个支持快速开发的框架,伴随 Spring4.0 而生,继承了 Spring 的优秀特质,简化了使用 Spring 编码、配置、部署的过程,使项目的开发变得简单、敏捷。Spring CloudSpring Cloud 是基于 Spring Boot 的一整套分布式系统下的微服务构建框架,包含了众多的子项目,如 Spring Cloud Config 、Spring Cloud Stream 等。具体可参考:http://projects.spring.io/spring-cloud/Hadoop/SparkHadoop 是首个获得极大应用的大数据框架,是大数据领域标志性的解决方案。Spark 通过完善的内存计算和处理优化,极大的提升了速度,是具备流处理能力的下一代批处理框架。Spark 体系还包括一系列附加库,如Spark Streaming 、Spark MLlib、Spark GraphX、SparkNet、CaffeOnSpark等。KafkaKafka 是 LinkedIn 使用 Scala 开发的一个分布式消息中间件,可以实现不同应用之间的松耦合,由于其可扩展、高吞吐、低延迟、高可靠等特性而被广泛使用。具体可参考:https://kafka.apache.org/introElasticSearchElasticSearch 是基于 Lucene 的实时分布式搜索引擎,由于其搜索稳定、可靠,速度快、安装方便等特点,是使用最广泛的开源搜索引擎之一。具体可参考《Elasticsearch: 权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htmlNutchNutch 是 Apache 旗下的高度可扩展、可伸缩、可插拔的开源爬虫框架,功能完整。当然爬出框架还有很多:Heritrix、Crawler4j、WebCollector、WebMagic、SeimiCrawler、HtmlUnit 等,可根据实际项目需要选择。在爬虫领域,Python 可能使用的更多一些,入门也简单。爬虫的难点不在于语言的选择,无论 Java 、Python 都可以胜任,关键还是反反爬策略的制定,以及各种实战的积累。ethereumjethereumj 是以太坊协议的纯 Java 实现。不过在区块链领域,Go 语言的使用率可能更高一些。开发人员可以酌情选择。代码可参考:/ethereum/ethereumjDeeplearning4JDeepLearning4J(DL4J)是基于Java语言的分布式深度学习框架,在机器学习领域应用广泛。入门可以参考《DL4J快速入门》:https://deeplearning4j.org/cn/quickstart不过由于谷歌的 TensorFlow 提供的 java API 也会日趋完善,目前不少 java 程序员也会选择 TensorFlow 作为机器学习的首选框架。以上只是个人正在使用或练手,并且比较看好的一些开源框架。如果想了解更多,可以去 Github 上搜索。譬如,在 GitHub 的 Search 框,输入 java stars:&10000,可以搜索到星数最多、最热门的一些 Java 开源框架,如图:如果想发掘 Java 前沿的开源项目,可以选择 Explore,点击 Trending 按钮,就可以看到近期热门的一些开源项目。可以选择 today「当天热门」、this week「一周热门」和 this month「一月热门」,还可以在右侧选择语言来查看,比如选择 Java 语言,如图:注:觉得好的,记得点击 star,大神贡献代码也需要鼓励 &:)可以看到,得益于最近被谷歌钦点为 Android 的官方语言,JetBrains 的 Kotlin 这一周成了最大的热门。Java 的生态圈如此繁盛,Java 离陨落还尚需时日吧。普通的 Java 程序员能更多的学习、使用这些优秀的框架,有能力的还可贡献一些代码,融入这个繁荣的生态,在我看来是上上策。JVM 语系Java 功能强大、生态丰富,已无需多言。但类型、语法与编程范式方面,存在一些局限性,也长期为人所诟病。所以,有不少开发人员试图去寻求其他语言,既可以突破 Java 的这些局限,又可以与 Java 和谐共处。Java 的祖师爷们也是非常明智,一开始就将编程语言 Java 与运行时环境 JVM 分离。JVM 负责与操作系统的交互,屏蔽了具体操作系统的细节,制订了一整套生成字节码的规范,使得前面这一构想得以顺利实施。如今有众多语言运行在 JVM 上,Groovy、Scala、Kotlin、Clojure 可能算得上是其中的佼佼者。GroovyGroovy 是类似 Ruby 的动态语言,适合编写脚本、插件、测试例,DSL (领域特定语言)等。知名的自动化建构工具 Gradle 主要就基于 Groovy 。ScalaScala 的设计初衷,就是在 JVM 上整合面向对象与函数式编程的各种特性。大名鼎鼎的大数据处理框架 Spark、消息中间件 Kafka、用于构建可容错,可扩展、高并发应用的Akka,都是基于 Scala 语言编写。Kotlin前几日刚升级为 Android 官方开发语言的 Kotlin ,近期是一个热门。从前面讲到的 Github 上的 star 指数也可窥见一斑。&基于 Kotlin 的库和框架、官方工具的支持、教学视频、文档等,也肯定会层出不穷。ClojureClojure 被认为是基于 JVM 的 Lisp 方言,是函数式编程的铁杆。知名的大数据处理框架 Storm 主要就是由 Clojure 语言编写而成。CeylonCeylon 是面向企业级应用设计开发的强静态类型编程语言,支持 Java 和 JavaScript 虚拟机。具体可参考:https://ceylon-lang.org/documentation/current/下图是 2017 年的 JVM 语言使用率调查:来源:Baeldung,链接:/java-in-2017注:Groovy 达到了将近40%的份额,有点出乎我的意料。另外,得益于谷歌这么推一把,Kotlin 后续的比例有望来个大跃进。2008 年开始,Oracle主办的 JVM 语言峰会,为 JVM 语系的架构师、设计师、工程师,提供了非常好的开放式合作的机遇。顺便说一下,今年的 JVM 语言峰会,时间:7月31日~8月2日,地点:Oracle Santa Clara Campus,有兴趣的童鞋可以关注一下。作为一名 Java 程序员,如果要选择第二门编程语言、或想来个多语言编程的话,选择 JVM 系的语言显然是一个非常不错的选择。选择 JVM 系语言的一大优势是,前期可以使用熟悉的 Java 搭架子,局部功能优先尝试一下新语言,如此风险最小,与 Java 可以实现无缝切换。至于具体如何选择,就要看你在功能性、实用性、舒适性、性之间,如何取舍了。结语Java 自身在性能、语法、编程范式等方面,也是在不断地提高改进。譬如 Java 8 引入了 Lambda 表达式、Optional、Streams、Date/Time API 等,Java 9 带来了 Jigsaw(模块化)等。Java 程序员可以适时的与时俱进。不过,谷歌等其他厂商由于对 Java 不具备掌控力,还有吃官司的风险,寻求 Java 的替代方案,动机是存在的。所以,作为 Java 程序员,过于依赖 Java,也是比较有风险的。适时的主动去改变,不要让自己哪天陷于被动。除了学习第二、第三编程语言,程序员可以把更多的重心,放在算法上。以后的无处不算法,从影视、过滤,到出行购物、住宿交友等等,我们都离不开算法。尽管许多优秀的算法,包括最前沿的深度学习学法,都会有大牛奉献开源实现,但只有其中的原理深刻理解了,才能掌握、并利用好这些算法。后记技术的更迭,有时候会来的很突然,很猛烈。但系统的更迭,往往会慢得多。譬如 Cobol 语言,尽管语言本身陨落已超过 20 年,依然能在银行、证券、保险、电信等行业领域里见到 Cobol 的身影。即使几年之后,Java 因各种阴差阳错、机缘巧合,开始走向陨落,Java 程序员们再混个 20 年,也是毫无压力。因为 Java 常年占据编程语言前列(榜首),目前有太多的平台使用 Java 了。Amazon、Google、eBay、阿里、京东、银行、证券、医疗、、电信、ERP等等。各个领域,各行各业,Java 程序员吃老本也能再吃个 20 年......当然,这只是 Java 抽中了下下签,您又恰巧选择了下下策。但愿不会如此。最后,推荐一幅比较全面、而又有趣的 JVM 语系的海盗图:Pirates of the JVM链接:/wp-content/uploads/2017/03/Pirates-of-the-JVM-JAXenter-768x4245.png注:避免盗图之嫌,有兴趣的可以点击链接查看。码字不易,如果觉得本文对您有帮助,不妨点个赞,对我是莫大的鼓励!如果你想进一步咨询或探讨,可以后台留言,或加入小密圈。/RfqFAIE本文由公众号「世相微语」原创,欢迎朋友圈分享。关注「世相微语」,希望有机会能一起探讨,一起合作。点击「阅读原文」,查看更多精彩文章。
Kotlin喧嚣过后,谈谈Java程序员未来的出路
按照规定,驾驶人在一个记分周期内累计达到12分未满24分的,将被扣留驾驶证,须到指定的交警支队及车管分所预约参加道路交通安全法律、法规和相关知识学习培训并重考科目一...
▲「让我们的汽车文化生活更精彩」 不在烂泥巴路里玩儿的SUV见过不少,可能有洁癖吧,它们选择了可以释放自己的路,去冲去跑,去做颜色不一样的烟火。 保时捷卡宴Turbo S 4...
现场图 北京联盟
现场图 夏天天气炎热,很多市民到海滨浴场去游泳,但是也有些人带着宠物狗来,这些狗随地拉撒不说,...
智能停车场轻松“开”进商业年会现场? 共享橱窗科技感十足惊艳全场?刷脸也能轻松支付? …… 没错,这些“黑科技”,尽在上海国际商业年会。 跟着IT人士,一起体验这场科...
济南市防办8月3日早发布最新汛情信息,采访人员了解到,8月2日6时至8月3日6日的这场降雨,济南市商河县降雨量达126.3毫米,全市最大的降雨点在商河县杨庄铺, 降雨量达195毫米...
8月2日17时34分,内蒙古阿拉善盟额济纳旗突遭强沙尘暴袭击。滚滚黄沙步步逼近,不一会就覆盖了全部天空,空气中是沙、是土已分不清。来源:...
8月1日,深圳女大学生罗琬璐独自去香港后失联的消息引发广泛关注,据其家人和同学介绍,7月29日,罗琬璐曾临时提出去香港购买化妆品,并表示当天...
建军90周年座谈会现场(摄影:颜旭) 国际在线报道(中国国际广播电台采访人员 颜旭 孙伶俐):8月1日晚,中国驻巴勒斯坦办事处在约旦河西岸城市拉姆安拉举行庆祝中国人民...
设计方发布的故宫端门避风阁项目图 近日,北京中建建筑设计院官方网站发布公告称,该院为故宫中轴线上端门设计的避风阁项目施工图出图,该...
国际在线互联网金融频道:根据国内数字资产交易平台OKCoin币行的数据显示,比特币昨天(8月1日)价格开市后直至亚市下午14:00时段都处于震荡攀升中,市场并未出现大幅波动...
大家正在看。。。
免责声明:本站文章除注明来源“北京联盟”外的文章均来自网络和网友投稿,著作权归原作者所有。北京联盟不承担任何连带责任!当前位置浏览文章
简评:我们继续上一部分的讨论。6. 默认 final 类《Effective Java》第 17 条建议每个类如果没有必要都不应该是子类化的,或者至少应该是经过精心设计和注释,以支持继承。在 Java 中,每个类都能子类化除非你明确声明类是 final 类型。如果你忘记了声明 final, 并且没有做好设计和注释,那么当客户使用的时候就会有麻烦,他们会认为他们可以创建子类,重写一些方法,并且假定一切都能照常运行。在 Kotlin 中,每个类默认都是 final 类型。你必须明确使用关键字 open(恰恰和 Java 相反)允许类能够被继承。这样可以避免不想被继承的类被允许继承。在 Kotlin 社区并非每个人都乐于见到 默认 final 类的设计。关于这个争执话题在 Kotlin 专题讨论中有一个热烈的讨论。热点新闻:最近发布的 Kotlin 1.1 beta 版本提供了编译器插件使 open 成为默认关键字。7. 不检查异常Java 有一个被称为异常检查的功能,编译器强迫函数的调用者捕获(或者重新抛出)一个异常。《Effective Java》有一整个章节讲解怎样恰当地使用和处理异常。Kotlin 的文档中解释了一个检查异常的问题在于:有时候你必须捕获一些永远不会出现的异常。这导致了空的 catch 块和冗余的代码。更糟的是当开发者被迫对可能的异常作出反应时会觉得很恼火,导致他们很可能忽略异常,从而出现空的 catch 块。《Effective Java》第 65 条建议“不要忽略异常”。而根据《Effective Java》第 59 条的建议,检查异常通常是没必要的,可以通过在调用方法前检查对象的状态或者判断返回值来替代。在我的研究期间,我发现了很多其他关于异常检查的问题:throws 会将实现细节添加到接口,这是不好的;版本化可能有问题,如果你更改了你的实现,并且你的方法中添加了 throws,API 都会发生变化(因为异常也是 API 的一部分);调用函数不应该规定调用者怎样执行其异常处理。因为有很多潜在的问题,Kotlin 和其他的一些编程语言,就没有异常检查。为了让调用者知道可能出现的异常,你应该在 kdoc 文档中使用 throws 标签来说明。8. 强制空检查在 Java 中,一个公共方法的方法签名不会告诉你返回值能否为空,例如:public List&Item& getSelectedItems()当没有项目被选中会发生什么?这个方法会返回 null 还是空列表?如果我们没有看到具体的实现就没办法确定(除非很幸运的,这个方法有充足的 javadoc 描述)。有两个开发者可能会犯的错误:当返回值可能为 null 时,忘记检查它能否为 null,导致著名的 NullPointerException 错误;检查它能否为 null,尽管它永远不会为 null,这就导致了冗余的代码。Joshua Bloch 在第 43 条中建议方法应该总是返回空的集合而不是 null。而在 Kotlin 中因为空值安全,你就知道什么时候返回值可能为 null 或者不可能为 null。像上面的例子,在 Kotlin 中如果一个返回类型 List&Item&? 就意味着可能为 null,而 List&Item& 就意味着不会为 null。如果它可以为 null,编译器就会在我们访问它的属性或者调用它的函数时强迫我们检查它能否为 null,也预防了开发者可能出现的失误。9. 没有原始类型泛型在 Java 1.5 中被添加,它们是一个很好的保证类型安全的方式。Joshua Bloch 在第 23 项中建议使用通用类型(List &Integer& 而不是 List),这样可以避免 ClassCastExceptions。在 Kotlin 中甚至干脆不允许使用原始类型了,所以你总是要声明泛型的类型参数,这会让你的代码更安全。10. 更容易定义差异《Effective Java》第 28 项中讨论了使用有界通配符,在 Java 中这非常的晦涩难懂。 Joshua Bloch 定义了 PECS 记忆单词(Producer extends, Consumer super) 帮助你决定什么时候使用 &? extends E&(协变)或者 &? super E&(逆变)。而 Kotlin 团队努力使差异处理变得更容易,所以他们放弃了通配符,并且像 C#,为协变提供了关键字 in,为逆变提供了关键字 out。这篇博文太短,无法详细解释这些关键字怎样工作,但是如果你有兴趣的话可以看一下声明侧变量,类型投影或者泛型。英文原文:How “Effective Java” may have influenced the design of Kotlin — Part 217 位谷歌 Android 开发专家是如何看待 Kotlin 的?
Google已经多次表达过他们不反对 Kotlin的使用,只要 Kotlin编译器依然生成有效的字节码,那么 Google就不会阻止任何人使用它。但很多人依然在等待官方的正式支持,一件可能永远不会发生的事情。虽然我们等到了这一刻,但我想如果能够知道 Google的 Android开发专家是如何看待 Kotlin的,那就更好了。如果你没有听说过,那你应该了解下,Google开发专家(GDEs)[1]是一个旨在表彰优秀开发者对所在领域所作出的贡献的项目。我联系了一些这样的 Android专家(人员列表很长!),我得到了来自 17位的答复。非常感谢你们这么好能够花时间来回答。我只是要求他们告诉我们关于 Kotlin[2]的一点想法,答案显然是未经过修改的,所以你可以发现支持和反对(或者不那么支持)的声音。我希望这有助于你知道 Kotlin是如何成为一个游戏规则改变者的,同时如果你是一名 Android开发者,我希望 Kotlin会成为你考虑使用的一门语言。其他的就不多说的,让我们来看看 GDEs们的看法吧,排名不分先后:1. Annyce Davis我以前使用 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]的能力,通过给 Context,Activity和 Date类添加扩展函数,使得我的代码简洁了很多,同时变得更加易于阅读。通过使用 Kotlin,我的代码变得更好了。2. Sebastiano Poggi我真的真的很喜欢这门语言。我个人认为它在很多情况下使得编码变成一件愉快的事情,相比之前,同样的情况下用 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,我喜欢它。3. Jorge BarrosoKotlin迈出了 Android开发的一大步,在这之前,Android缺少 Kotlin所带来的特性,相比于其他的 Java平台,Android平台的 Java开发有些过时,即使现在有在推动 Java 8,但它还是不会变成我们喜欢的现代编程语言。现在我看到的一个最大的问题是它的推广,说服公司转型到 Kotlin并展示它的价值很困难。对于技术型公司而言会相对简单,因为对于开发者来说是一个激励和挑战,但对于小公司来说更困难。此外,很多公司担心如果没有 Google在背后支持 Kotlin的话,将很难被广泛使用。我喜欢这门语言以及它对生态系统的贡献,我希望能够在我的日常生活中更多地使用它,但我所从事的项目的性质不允许这样做。我鼓励大家都去看一下,但不限于 Kotlin,可能是另外一门语言,因为这会为他们打开一个新的视野,同时也是编写软件时非常有用的学习。4. Donn FelkerKotlin是极好的,我喜欢它,它是 Android世界的一股清流。5. Mark Allison虽然我也很喜欢 Kotlin,但我不认为它已经足够成熟到能够在线上产品中使用。成熟模式和最佳实践的缺乏,使得 Kotlin编写的代码可能难以维护。从 Kotlin缺乏静态代码分析工具可以看出来。虽然 Java的静态代码分析工具不完美,但它们可以作为衡量技术债务的好指标。Java工具不能用于 Kotlin,因为它们专门分析的是 Java语言源码。6. Huyen Tue Dao我完全迷上了 Kotlin。工作中我们 100%的使用 Kotlin进行编码,包含线上产品的代码。事实上,无论何时何地只要能够使用 Kotlin的地方我都会使用 Kotlin进行编码,归功于 Kotlin和 Java的可互操作性[5],几乎可以说任何地方都可以使用 Kotlin。我可以访问系统平台 API和其他已经存在的代码和函数库,同时享受和利用 Kotlin所带来的所有现代编程语言特性。由于 Kotlin是一门新语言,我们都在发现和定义最佳实践的过程中,我不得不同时从高级和低级两个层面仔细检查每一行代码的影响。这很有趣,迫使我更加谨慎和认真的作出某些决定。这门语言的简洁令人惊叹。我喜欢 Android,但我们需要处理很多样板代码,Kotlin有助于减少一些样板代码的编写。虽然太多的精简可能导致代码可读性的问题,我认为大多数时候 Kotlin实际上提高了代码可读性,只要我们不要太疯狂,并记住我们想要什么样的最佳实践。7. Dmytro Danylyk对于那些停留在 Android世界的开发者而言,Kotlin是一个真正的规则改变者,它拥有很多我喜欢的特性:空类型安全,data classes[6],属性和懒加载属性,扩展函数,协程,不变性等等。我很享受使用 Koltin来编码,因为我没有必要在项目中引入太多的第三方库,Kotlin已经非常好的提供了大部分的支持。归功于 JetBrains,Kotlin有很棒的 IDE支持以及非常多的学习资料,甚至有在线的 REPL[7]。8. Anup Cowkur我曾经使用过像 Haskell和 Elixir这样的语言进行编码,因此当我进行 Android开发时时常在想:“为什么 Android中不能有这样好用的特性?”。现在使用 Kotlin,我们可以做到了。可选类型内置在 Kotlin的类型系统中,函数是一级公民,类型匹配(某种程度上)和不可变类型等特性终于让我在 Android开发中可以使用真正的函数式编程。9. David Vávra在我的主要应用(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大会上变成现实。10. César Valiente我认为 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吧,你会爱上它的!11. Nelson GlauberKotlin是一门令人印象深刻的语言,该语言的特性是惊人的,它移除了 Java语言所需的一堆样板代码。更不用说市面上绝大多数函数库(用 Java语言编写)完全兼容 Kotlin的事实。另外一个使得该语言易于采用的是它和 Android Studio的完美和稳定的兼容。对于 Java/Android开发者(新手可能未必如此)而言学习曲线很缓和。我从去年开始通过阅读 Antonio的书[12](顺便说一句,这本书很棒)来学习 Kotlin,从那以后,我一直在我的个人项目和演讲中使用这门语言。不幸的是,我还没有机会在线上产品中使用它,但我毫不怀疑 Kotlin已经成熟到足以在大型项目中有效的使用。在我看来,不使用 Kotlin的唯一理由是,一旦你开始用 Kotlin进行编码,你将不想再使用 Java进行编码。12. Ryan Harter大约一年前,我开始用 Kotlin来编写所有的新代码,经过一些尝试,我发现它是稳定的,而且这门语言提供的若干特性所带来的好处值得我做这样的转换。归功于 Kotlin和 Java的可互操作性,任何我用 Kotlin还不知道怎么实现的功能,我可以回退到使用 Java来实现。Kotlin的扩展函数语言特性最大程度上简化了我的工作流程,虽然这个特性很简单。在我的图形相关工作中,需要做大量的数学和矩阵操作,也就是会用到很多工具类。扩展函数[13]极大的简化了代码的编写,并使代码更加的精炼。在原有的面向对象编程的基础上,混合着对函数式编程的支持,使得工作更加的愉快。对于正在考虑切换到 Kotlin的开发者,我的最大建议是记住 Kotlin和 Java并不是非此则彼的关系,相反,Kotlin能够很好的和现有的 Java代码协同工作,所以你可以一步一步的开始尝试使用 Kotlin。13. Ubiratan Soares从一个开发者的经验来看,Kotlin是 Android应用开发的未来。Kotlin对 Android开发的影响和三年前 Grade对 Android的影响非常相似。作为 Android开发者社区,我们应该拥抱 Kotlin,传播 Kotlin,并让一大批的开发者来使用 Kotlin,因为我们值得拥有更好的方法来开发 APP,满足用户的需要并在工作中取得好成绩。14. Philippe BreaultKotlin对于 Android开发者而言是一股清流。我喜欢它在 lambda表达式上所做的工作,能够让编译器内联 lambda,当它起作用时,允许我们 Android开发者在紧凑循环中使用它,这样通常可以避免实例化新对象。简单的特性当然也很重要,例如表达式后面不需要加分号;如果在同一行给一个变量赋值时不需要输入两次变量的类型;使用属性来代替 getters/setters方法等等。这些特性使得代码阅读更方便。我唯一希望得到改进的功能是 Android Gradle插件和 Kotlin插件的可互操作性。现阶段,两者的混合使用经常会出现问题。话虽如此,每个 Android开发者都应该对这门语言保持关注,最好是尝试使用它。15. I?aki VillarKotlin为 Android平台带来了新酷的概念,而不仅仅是使用另外一门语言来编写类和 activities。我们此时正在将自动化框架移植到 Kotlin上,我们正在享受如何用声明的方式定义自己的 DSL,并让开发和测试人员更流畅的编程测试代码[14]。16. Dan Lew在不牺牲性能或者安全性的前提下,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我是作为一名 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]:
(来源:,如对本网转载内容、版权有异议,请联系我们: )
安卓网官方微信
微信号 Hiapk2013
这里有最无节操的小编和最鲜辣的资讯!
手机扫描二维码访问

我要回帖

更多关于 kotlin和java 的文章

 

随机推荐