热门标签 | 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 开发之旅。



推荐阅读
  • 反向投影技术主要用于在大型输入图像中定位特定的小型模板图像。通过直方图对比,它能够识别出最匹配的区域或点,从而确定模板图像在输入图像中的位置。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 在使用STM32Cube进行定时器配置时,有时会遇到延时不准的问题。本文探讨了可能导致延时不准确的原因,并提供了解决方法和预防措施。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • DCG 创始人兼首席执行官 Barry Silbert 发布致股东信,详细解答了 19 个核心问题,并分享了公司未来的发展方向。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 本文详细介绍了C++中map容器的多种删除和交换操作,包括clear、erase、swap、extract和merge方法,并提供了完整的代码示例。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 本文深入探讨了线性代数中向量的线性关系,包括线性相关性和极大线性无关组的概念。通过分析线性方程组和向量组的秩,帮助读者理解这些概念在实际问题中的应用。 ... [详细]
  • 获取Jedis和Commons Pool JAR包的两种方法及详细步骤
    本文介绍如何通过网盘链接或官方网站获取Jedis和Commons Pool的JAR包,并提供详细的图文教程。同时,还附有导入JAR包到项目的相关建议。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
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社区 版权所有