热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

功能更强代码和错误更少Duolingo和GoogleHome的Kotlin之旅

利用大受欢迎,团队必定备受鼓励,于是决定把最棒的创意和性能增加进利用中,而后用户们会更加称心,如此循环……然而如此美好的图景在事实中会遇到事实的问题:代码量陡增,以及随之而来的
文章目录[隐藏]
  • 从 Kotlin “检查员” 到 “专家”
  • 代码量均匀缩小 30%
  • Google Home 逐渐引入 Kotlin
  • 最常见的解体直降 33%
  • 上手 Kotlin,当初就是最佳时机

利用大受欢迎,团队必定备受鼓励,于是决定把最棒的创意和性能增加进利用中,而后用户们会更加称心,如此循环……然而如此美好的图景在事实中会遇到 “事实的问题”:

  • 代码量陡增,以及随之而来的开发和保护老本
  • 代码中的谬误也随之减少,进而造成利用的解体数量减少

让咱们看看 Duolingo 和 Google Home 是如何解决这些问题的。

从 Kotlin “检查员” 到 “专家”

Duolingo 是世界上最受欢迎的语言学习平台之一,也是 Google Play 上下载量最高的收费教育利用之一 (已冲破 2 亿),为超过 3 亿名学习者提供可收费应用的语言学习服务。

随着利用本身的演进,Duolingo 的 Android 开发者发现代码库的代码行数每年增长 46% 之多!为彻底解决这个问题,团队最终统一决定从 Java 迁徙至 Kotlin。

该团队发挥了真正的 Duolingo 格调,通过发展每日排行榜比赛并激励学习,让迁徙过程充斥游戏乐趣 (没错,和他们在 Duolingo 利用中引入的游戏化思维一模一样)。该团队中经验丰富的 Kotlin 开发者负责 “Kotlin 检查员” 角色,并分享代码审核方面的最佳做法,最终该团队的所有 Android 开发者都成为了 Kotlin 专家。

代码量均匀缩小 30%

两年后,Duolingo 团队实现了迁徙工作,代码的可维护性失去显著晋升。他们发现, 将 Java 文件转换为 Kotlin 文件后,代码行数均匀缩小了 30%,某些状况下高达 90%

△ Duolingo 代码量随工夫的变动,绿色为 Kotlin

  • 团队博客: 将 Duolingo 的 Android 100% 迁徙至 Kotlin

总体而言,在迁徙到 Kotlin 后,咱们十分称心,也很快乐看到 Kotlin 在咱们公司和整个软件行业中的使用率一直增长!

—— Art Chaidarun,资深高级软件工程师

只管有了新的产品性能,沉闷贡献者的数量减少了一倍以上,但他们的代码库规模简直与两年前未迁徙时一样,这证实这一决策带来了不错的投资收益。此外,外部问卷调查显示他们的  NPS 晋升了 129 个点,开发者满意度跃升 ,开发者认为是采纳 Kotlin 起到了次要作用。当初,他们的 Android 利用齐全应用 Kotlin 代码库,这让他们能够更加释怀、高效地发展工作。

Google Home 逐渐引入 Kotlin

Google Home 利用 可帮忙您设置、治理和管制您的 Google Home、Google Nest 和 Chromecast 设施以及数千种智能互联家居产品 (如灯具、摄像头、恒温器等等)。其背地的工程团队应用 Kotlin 和 Android Jetpack 库来晋升工程生产力和开发者满意度,这让他们受害良多。

团队决定将 Kotlin 整合到代码库中,以晋升编程效率,并应用古代语言性能 (如 var/val、智能投射、协程等)。 截至 2020 年 6 月,30% 左右的代码库是应用 Kotlin 编写的 ,且倡议应用 Kotlin 来开发所有新性能。

该团队还采纳 Jetpack 库来进步开发者的速度、升高对样板代码保护的需要并缩小代码量。Jetpack 库还有助于进步代码的可测试性,因为有更清晰的性能边界和 API。

最常见的解体直降 33%

Kotlin 可助您进步工作效率,让您编写更少的代码来实现更多的性能,这就是您可实现的 “速度” 晋升。

—— Jared Burrows,Google Home 的软件工程师

与等效的现有 Java 代码相比,改用 Kotlin 能够缩小所需的代码量。例如,应用数据类和 Parcelize 插件:  一个在应用 Java 时须要手动编写 126 行代码的类,当初应用 Kotlin 只需编写 23 行,代码量减少了 80% 。此外,还能够主动生成并及时更新平衡和解析办法。应用 Kotlin 中提供的实用办法,还能够简化许多嵌套循环和过滤查看。

因为 Kotlin 能够将是否可为 null 作为语言的一部分,因而能够防止辣手的状况,例如在 Java 中不统一地应用是否可为 null 正文可能会导致脱漏谬误。实现 Kotlin 后,Google Home 利用团队遇到的 NullPointerExceptions 缩小了 33%。这是 Google Play 管理中心中最常见的解体类型,因而缩小此类解体能够显著晋升用户体验。

对于 Google Home 这样的大型成熟利用 (代码超过数百万行),可能逐渐增加 Jetpack 库会很有帮忙。纳入这些库后,该团队能够整合并替换量身定制的解决方案,有时甚至只须要一个库。Jetpack 库可帮忙工程师遵循最佳做法,并且编写更简洁的代码 (例如,应用 Room 或 ConstraintLayout),因而可读性也有所提高。该团队将许多新的 Jetpack 库视为 “必备库”,包含 ViewModel 和 LiveData,它们在 Google Home 代码库中失去宽泛应用。

Google Home 利用团队发现将 Jetpack KTX 与 Kotlin 协程集成特地有用。该团队当初能够将协程与生命周期感知型组件 (如 ViewModel) 联合应用,从而防止简单的异步编程谬误。

上手 Kotlin,当初就是最佳时机

正如 Google Home 团队所说的,Kotlin 能够逐渐增加进现有的我的项目,并带来更简洁的代码和更少的谬误。因为 Jetpack 中诸如 Paging 3 等开发库曾经优先应用 Kotlin 进行了重写,再加上正在热火朝天开发的 Jetpack Compose,开发者们在为利用构建界面、实现性能的时候会愈发事倍功半。

咱们最近刚刚公布了 Kotlin 1.4,其中引入的诸多全新语言个性改善了编写 Kotlin 代码的 “人机工程学”,更通过对编译器的改良晋升了其整体品质和性能。

当初就是上手 Kotlin 的最佳时机,咱们曾经为您筹备了 全新的课程,助力您开启 Kotlin 开发之旅。



推荐阅读
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 本文提供了一种有效的方法来解决当Android Studio因电脑意外重启而导致的所有import语句出现错误的问题。通过清除缓存和重建项目结构,可以快速恢复开发环境。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文旨在探讨设计模式在Visual FoxPro (VFP) 中的应用可能性。虽然VFP作为一种支持面向对象编程(xbase语言)的工具,其OO特性相对简明,缺乏高级语言如Java、C++等提供的复杂特性,但设计模式作为一种通用的解决方案框架,是否能有效应用于VFP,值得深入研究。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 开发笔记:前端之前端初识
    开发笔记:前端之前端初识 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
author-avatar
手机用户2502923513
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有