Java boolean getters“ is”vs“ are”

我知道 Java 中关于 boolean getter 的约定包括前缀“ is”。

isEnabled
isStoreOpen

But what if the subject is plural? That is, what if instead of wanting to know if a store is open, I wanted to know if all the stores are open?

isStoresOpen()在英语中没有意义。

我很想写下这样的字:

areStoresOpen
areDogsCute
areCatsFuzzy

我认为这是有道理的,但是有人告诉我,我应该忍住,放弃主语动词同意,使用 isStoresOpenisDogsCuteisCatsFuzzy

无论如何,我应该如何处理操作复数主题的布尔型 getter 函数呢?

37448 次浏览

The convention is to prefix the getter-method with "is" not the variale itself.

例如:。

private boolean enabled;


public boolean isEnabled() {
return enabled;
}

and

private boolean storesOpen;


public boolean isStoresOpen() {
return storesOpen;
}

IsStoresOpen ()在英语中没有意义。

它可能在语法上没有意义,但它遵循惯例,看起来足够可读。

- isEnabled()Java naming conventions中也可以写成 getEnabled()

- 遵循命名规则是一个好习惯,当你使用 Java Beans时会有帮助。

一般来说,我认为代码应该尽可能容易阅读,这样一个方法几乎可以作为一个段落来阅读(如 Clean Code所支持的那样)。因此,我将尽可能容易地命名声音/阅读的方法,并遵循 are的语法规则。使用现代 IDE,不需要专门查找 get/is就可以很容易地找到方法。

然而,库马尔关于豆子的观点很有道理。很多工具只会寻找 get/is。在这种情况下,我可以考虑同时使用这两种方法。一个是为了方便阅读,另一个是为了工具使用。

许多工具期望使用 isget,但不太可能识别 are

为了更好的兼容性和约定,可以尝试改变它们的措辞,比如 getDogsAreFuzzy()getStoresAreOpen()之类的东西。

我不记得这是从哪本书上来的,但本质上是代码读取的次数要比写入的次数多得多。为可读性而写。

在面向对象程序设计,这应该很少,如果曾经发生,因为 StoreCat或什么你应该是一个独立的类,有自己的 isOpen()isFuzzy()方法。如果您有一个更高的类型,请考虑分解到您实际使用的更原子级别。一般来说,在最低层次上对象不应该是复数。

JavaBean 规范要求对 getter 使用 get,除非它是 boolean,然后使用 isare是非标准的,不会被任何需要标准 Bean 命名的东西识别。

在您的问题中,您明确地询问关于 getter 的内容。Getter 返回有关类的一个实例的一些信息。例如,您有一个类 Store。现在,isStoreOpen对于 getter 来说是一个非常好的方法名。

接下来,您将提到一个检查所有存储是否打开的方法。这个方法根本不是 getter 函数,因为它不返回关于一个实例的信息,而是关于所有实例的信息。当然,除非有一个类 Stores。如果是这样的话,你应该重新考虑你的设计,因为 Java 已经有了存储数量的方法,比如数组或者集合,所以你不需要编写额外的类。

If this is not the case, then this method name is perfectly fine. An alternative may be just allStoresOpen without the 'is'.

DR: 如果您处理的是多个实例,那么它就不是 getter,如果是,那么您的设计就很糟糕。

你的编码是什么,说英语还是 爪哇咖啡

当我阅读 Java 代码时,我希望事情是结构化的。以 is开头的布尔方法是一个很好的结构。

return 0;

有足够的英语和 Java 标准怎么样:

  • **are**StoresOpen() > 为 > isEveryStoreOpen()
  • **are**CatsCute() > 为 > isEachCatCute()

当我对正确的单词产生怀疑时,我总是喜欢查同义词词典。

老实说,我会说肯定忘记了 are*和坚持与 is*。把 "is"当作变量的意思,如果可能的话,可以取个更好的名字。

我想说的是 isStoresOpen 听起来没那么糟糕,但是如果你觉得更好的话,你可以使用 isStoresAreOpen。

但我的总体想法是坚持传统。它对 getter 使用“ get”,对 boolean 类型使用“ is”。我个人认为使用“ is”有时已经有问题了。是的——在“如果”条件下它看起来确实不错,但是有时候我只是在编码时写下“ get”,检查下拉列表中我需要的变量,然后开始思考出了什么问题,为什么我找不到它,然后我意识到它是以“ is”开头的..。

在这个 StoresOpen 中,isStoresOpen () 似乎是复数形式,

当你遵循 Java 变数命名原则和 Java bean 标准时,他们已经为 boolean 和其他类型预定义了前缀,所以你应该遵循 Java bean 的变数命名原则。

我们来谈谈你的观点 当你看到 商店开门作为一个英语预期,是的,它看起来像复数。 再次对这个词进行深入的观察,

给你

StoresOpen 根据英语语法是复数形式,

IsStoresOpen的输出结果不是复数,而是单数,或者按照编程惯例可以说是标量。

输出结果是布尔型的,只是对或错

不像你的英语复数语句 小真的假的

不是 没错假的的数组,也不是 没错假的的集合

这里我们可以说,这里我们关心的是从布尔 bean 方法返回的值,而不是给类的属性命名来指向真实世界的实体。

更重要的是,每当这样的布尔值属性在类中使用,并且这些属性被任何框架中的预定义库使用时,那么使用前缀“ ”的框架就可以检索布尔值,

为什么意味着它并不比你聪明多少,因为你知道英语语法,如复数/单数,多路复用器等。