使用 Kotlin 提高生产力

使用 Kotlin 提高生产力

Kotlin 以其简洁的特性而闻名,而在我们的实践中,更加简洁就意味着更加高效。事实上,在使用 Kotlin 的专业 Android 开发者中,有多达 67% 的人表示 Kotlin 已经帮助他们提升了生产力。在接下来的内容中,我会分享一些 Kotlin 帮助我们的合作伙伴工程师们提高生产力的方式,并为您介绍有助于此的 Kotlin 功能。

在使用 Kotlin 的专业 Android 开发者中,有多达 67% 的人表示 Kotlin 已经帮助他们提升了生产力

简洁、简单且高效

Kotlin 的简洁性对开发的各个阶段都有影响:

  • 作为代码作者: 您可以专注于需要解决的问题 (而不是语法)。更少的代码意味着更少地测试、更少地调试以及更少写出 Bug 的机会。
  • 作为审阅和维护者: 您需要阅读的代码变少了,从而更容易理解代码的作用,也因此更容易审阅和维护代码。

以下例子来自 Flipkart 的团队:

"在一次内部调查中,50% 的开发人员提到,对于使用 Kotlin 编写的模块,预估完成功能所需的时间会有所减少。"

——Flipkart

Kotlin 的功能与生产力

由于 Kotlin 的简洁与高可读性,大多数 Kotlin 的功能都可以提高生产力。下面让我们来看一些最常用的功能。

默认参数与构建器

在 Java 编程语言中,当您的构造函数中的某些参数是可选参数时,您通常会采用下面两种方法之一:

在使用 Kotlin 时,由于默认参数功能的存在,您无需使用这两种方法。默认参数使您无需额外的样板代码便能实现函数重载。

对 Kotlin 的使用使得 Cash App 团队可以清除诸多构建器,从而减少了他们需要编写的代码量。在某些情况下,代码量被减少了 25% 之多。

举个例子,下面的代码是一个 Task 对象分别使用构建器及默认参数的实现方式。该 Task 唯一的必需参数是任务名 (name):

/* Copyright 2020 Google LLC.    
   SPDX-License-Identifier: Apache-2.0 */
3
- public class Task {
-     private final String name;
-     private final Date deadline;
-     private final TaskPriority priority;
-     private final boolean completed;
-
-     private Task(String name, Date deadline, TaskPriority priority, boolean completed) {
-         this.name = name;
-         this.deadline = deadline;
-         this.priority = priority;
-         this.completed = completed;
-     }
-
-     public static class Builder {
-         private final String name;
-         private Date deadline;
-         private TaskPriority priority;
-         private boolean completed;
-
-         public Builder(String name) {
-             this.name = name;
-         }
-
-         public Builder setDeadline(Date deadline) {
-             this.deadline = deadline;
-         return this;
-         }
-
-         public Builder setPriority(TaskPriority priority) {
-             this.priority = priority;
-             return this;
-         }
-
-         public Builder setCompleted(boolean completed) {
-             this.completed = completed;
-             return this;
-         }
-
-         public Task build() {
-             return new Task(name, deadline, priority, completed);
-         }
-     }
-}
+ data class Task(
+     val name: String,
+     val deadline: Date = DEFAULT_DEADLINE,
+     val priority: TaskPriority = TaskPriority.LOW,
+     val completed: Boolean = false
+)

您可以通过我们的这篇 Kotlin Vocabulary | Kotlin 默认参数 了解有关默认参数的更多信息。

object 关键字与单例

单例模式 大概是软件开发者最常用的设计模式之一,它可以帮助我们创建一个对象的单个实例,而其他对象可以访问和共享该实例。

创建单例时,您需要控制对象是如何被创建的,保证只存在一个实例并确保代码的线程安全。而在 Kotlin 中,您只需使用一个关键字: object

/* Copyright 2020 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 */

- public class Singleton{
-    private static volatile Singleton INSTANCE;
-    private Singleton(){}
-    public static Singleton getInstance(){
-        if (INSTANCE == null) {                // Single Checked
-            synchronized (Singleton.class) {
-                if (INSTANCE == null) {        // Double checked
-                    INSTANCE = new Singleton();
-                }
-            }
-        }
-        return INSTANCE;
-    }
-    private int count = 0;
-    public int count(){ return count++; }
- }

+ object Singleton {
+     private var count = 0
+     fun count(): Int {
+         return count++
+     }
+ }

操作符、字符串模板及更多

Kotlin 语言简洁与简单的特性,同样体现在 操作符重载解构 与字符串模板等功能中。这些功能使得代码变得十分易读。

举个例子,假设我们有一个图书馆和一些书。那么从图书馆移除书籍并处理和打印书籍标题的操作,便可编写为下面这样:

/* Copyright 2020 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 */

fun borrow(){
    library -= book
    val (title, author) = book
    println("Borrowed $title")
}

这里用到的 Kotlin 功能有:

  • -= 的实现使用了 操作符重载
  • val (title, author) = book 使用了 解构
  • println ("Borrowed $title") 使用了字符串模板。

总结

Kotlin 使得阅读和编写代码变得简单,它内建了诸如 单例委托 这类模式的实现,从而可以帮助我们移除那些可能导致 bug 或增加维护成本的代码。而像 字符串模板lambda 表达式扩展函数操作符重载 这类功能则可以使代码更加简洁明了。代码编写得更少意味着代码的阅读量变小,同时也意味着需要维护的代码更少、错误也更少,从而带来更高的生产力。

您可以阅读 使用 Kotlin 创建更好的 App 来了解更多,也可以通过阅读学习用例来了解开发者们是如何从 Kotlin 中获益的。如果您要迈出使用 Kotlin (世界上最受欢迎的语言之一) 的第一步,请查阅我们的 使用入门 页面。

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io Funder | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.
🍗