[外文翻译]《Effective Java》在哪些方面影响了 Ko

Java是伟大的编程语言无疑,但它也有一些众所周知的缺陷,比如那些常见的坑和从早期继承下来的不太重要的东西(Java 1.0发布于1995年)。 Joshua Bloch写了一本颇受推崇的书叫《Effective Java》,内容是关于如何写出好的Java代码,同时避免常见的编码错误及如何应对Java的不足。它有78个章节,称为“条目”,从多个方面为读者提供关于Java编程的宝贵建议。

现代编程语言的创造者有很大的优势,因为他们能够分析现有语言的缺点,并在设计语言的时候尽量避免。Jetbrains是一家开发了几款非常受欢迎的IDE的公司,于2010年决定为自己的开发工作创造一种编程语言——Kotlin。它的目标是更简洁、更有表现力,同时避免Java的一些不足。这家公司之前发布的所有IDE都是用Java编写的,所以他们需要一种与Java高度互操作的语言,并能够编译成Java字节码。他们还希望Java开发人员可以轻松切换到Kotlin. 也就是说,Jetbrains希望构建一个更好的Java。

在重读《Effective Java》时,我发现其中的很多内容对Kotlin来说已经用不着了,所以产生了一个想法,想探讨一下这本书是否影响了Kotlin的设计。

1. Kotlin 的默认值不再需要builder

当Java构造函数有很多可选参数时,代码将变得冗长,可读性差且容易出错。针对这个问题,Effective Java的条目2讲述了如何有效地使用构造器模式(Builder Pattern)。构建这样的对象需要写很多代码,如下面的代码示例中的“营养学”对象。它有两个必需的参数(serveSize,servings)和四个可选参数(calories, fat, sodium, carbohydrates):

public class JavaNutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public static class Builder { // Required parameters private final int servingSize; private final int servings; // Optional parameters - initialized to default values private int calories = 0; private int fat = 0; private int carbohydrate = 0; private int sodium = 0; public Builder(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; } public Builder calories(int val) { calories = val; return this; } public Builder fat(int val) { fat = val; return this; } public Builder carbohydrate(int val) { carbohydrate = val; return this; } public Builder sodium(int val) { sodium = val; return this; } public JavaNutritionFacts build() { return new JavaNutritionFacts(this); } } private JavaNutritionFacts(Builder builder) { servingSize = builder.servingSize; servings = builder.servings; calories = builder.calories; fat = builder.fat; sodium = builder.sodium; carbohydrate = builder.carbohydrate; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cc8c7fb36c2398f444afd229c7b5ef12.html