【译】Kotlin让你拥有更高的生产力

440 阅读4分钟

More productivity with Kotlin
作者:Florina Muntenescu

原文链接

大家都是知道Kotlin的特点就是简洁,也正是因为它的简洁,在实际的开发工程中让它有更高的生产力。甚至有67%的专业的Android开发者认为使用Kotlin提高了他们的生产力。本文我会跟大家分享一些Kotlin帮助我们的合作伙伴们以哪些方式提高了哪些生产力,并且看一下是哪些Kotlin特性起到了作用。

67%的参与调查的专业的Android开发者认为Kotlin提高了他们的生产力

简洁,简单和生产力

Kotlin的简洁可以说影响着整个开发周期:

  • 作为一名代码的作者,意味着你可以集中精力到你艺解决的问题,而不是语法。更少的代码意味着更少的测试和调试,同时降低了产生bug的可能性。
  • 作为一名代码审查人员或者说维护者,意味着你不再需要阅读那么多的代码,可以让你更容易理解代码是干嘛的,因此也更容易审查和维护。

Flipkart就有一个这样的案例:

在一个内部调查里,有50%的开发者提到如果模块是用Kotlin写的,完成一个需求他们评估的工作量会小一些。

Kotlin特性和生产力

Kotlin有更高的生产力主要是因为简洁和更高的可读性这两个特性,那就让我们看下最常用的几个例子。

默认的参数和构造器

在Java里面,当你构造器里面有的参数是可选的时候,通常你会选下面两种方式之一:

  • 添加多个构造函数
  • 使用建造者模式

在Kotlin里由于有了默认参数,以上两个都不需要了。默认的参数可以让你重载函数而不需要更多的样板代码。

当Cash APP开始使用Kotlin后,他们可以删掉很多建造器了,从而减少了代码量。在某些场景下,能减少25%的代码量。

比如下面这个Task对象的实现,只有task的name是必须参数,当用建造者模式和使用默认参数的对比:

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

- 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 系列文章了解更多关于默认参数的用法。

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的简洁和简单,比如操作符重载,解构声明和字符串模板,这些都大大提高了代码的可读性。

举个例子,假设我们现在有一个书库。从书库里面拿出一本书,我们只需要书的标题并打印,用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,这个世界上最可爱的语言吧Get Started