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



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因
    本文介绍了解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因。其中包括修改包名、解决service name重复、处理jar包冲突和添加maven依赖等解决方案。同时推荐了一个人工智能学习网站,该网站内容通俗易懂,风趣幽默,值得一看。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 使用chrome编辑器实现网页截图功能的方法
    本文介绍了在chrome浏览器中使用编辑器实现网页截图功能的方法。通过在地址栏中输入特定命令,打开控制台并调用命令面板,用户可以方便地进行网页截图操作。 ... [详细]
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社区 版权所有