Java布尔getters“是”vs“是”
我知道Java的布尔getters约定包含前缀“is”。
isEnabled isStoreOpen
但是如果主题是复数呢? 也就是说,如果不想知道某家商店是否开放,我想知道所有商店是否开放?
isStoresOpen()
在英语中没有意义。
我很想写下getters:
areStoresOpen areDogsCute areCatsFuzzy
而且我认为这是有道理的,但是我被其他人告知,我应该把它吸起来,放弃主题动词协议,并使用isStoresOpen
, isDogsCute
, isCatsFuzzy
。
无论如何,我应该怎样做一个复杂的主题布尔getters?
我不记得这是从哪里来的,但其实质是代码将会被读取的次数比写入的次数多。 写可读性。
如何拥有足够的英语和遵循Java标准:
isEveryStoreOpen()
或isEachCatCute()
如果对正确的词有疑问,我总是喜欢打开词库。
惯例是在getter-method前加“is”而不是variables本身。
例如
private boolean enabled; public boolean isEnabled() { return enabled; }
和
private boolean storesOpen; public boolean isStoresOpen() { return storesOpen; }
isStoresOpen()在英语中没有意义。
这在语法上可能没有意义,但是遵循了惯例,看起来足够可读。
许多工具期望is
或者不可能认识到are
。
尝试改写它们,如getDogsAreFuzzy()
或getStoresAreOpen()
或类似的东西,以获得更好的兼容性和约定。
Java Bean规范说,使用get
getter,除非它是一个boolean
然后使用。 是非标准的,不会被任何需要标准Bean命名的东西所认可。
–在Java naming conventions
isEnabled()
也可以写成getEnabled()
。
–遵守命名规则只是一个好习惯,当你使用Java Beans
时候会有所帮助。
一般来说,我认为代码应该尽可能易读,这样一个方法几乎可以作为一个段落来阅读(如Clean Code
所说)。 因此,我会尽可能地简单地将读法命名为/读法,并遵循语法的规则。 使用现代的IDE,很容易find方法,而不需要专门查找get
/ is
。
然而,库马尔关于豆类很好。 很多工具只会查找get
/ is
。 在这种情况下,我可能会考虑有两种方法。 一个便于阅读,一个用于工具使用。
你在写什么语言: 英文或Java ?
当我正在阅读Java代码时,我期望事情在那里,让我search这两个getter, is和是前缀,比search一个前缀更复杂。
但是另一方面呢,早上我看报纸的时候,我什么也没有找,所以你可以用更传统的英文写法。
返回0;
在面向对象的编程中,这个应该很less发生,因为Store
或者Cat
或者你应该是一个独立的类,有自己的isOpen()
或者isFuzzy()
方法。 如果你有更高的types,考虑分解到更实际的primefaces级别。 一般来说,对象不应该是最底层的复数。
在你的问题中,你明确地询问了获得者。 getter返回关于你的类的一个实例的一些信息。 例如,你有一个类Store
。 现在, isStoreOpen
是一个非常好的getter方法名称。
接下来,你提到一个方法,检查所有商店是否打开。 这个方法根本不是一个getter,因为它不会返回关于一个实例的信息。 当然,除非有一个类Stores
。 如果是这样的话,你应该重新考虑你的devise,因为Java已经有方法来存储一些实例,比如数组或集合,所以你不必编写额外的类。
如果不是这种情况,那么这个方法的名字是完全正确的。 一个替代可能只是所有的allStoresOpen
没有“是”。
TL; DR:如果你正在处理多个实例,那不是一个getter。 如果是这样,你的devise是不好的。
坦率地说,我会说绝对忘记的are*
和坚持is*
。 如果可能的话,把"is"
作为variables的意思,并作一个更好的名字。
我会说isStoresOpen听起来不是那么糟糕,但是如果这听起来对你更好,你可以让isStoresAreOpen。
但是我的总体思路是坚持公约。 getter使用“get”,布尔types使用“is”。 我个人认为使用“是”有时已经成问题了。 是的 – 它在“if”条件下看起来不错,但是有时我只是在编码时写下“get”,并检查我需要的variables的下拉列表,并开始想知道什么是错的,为什么我找不到它,然后我意识到从“是”开始…
isStoresOpen()在这个StoresOpen中似乎是一个复数,
遵循Java命名约定和Java Bean标准时,它们具有布尔型和其他types的预定义前缀,因此应遵循Java Beans命名约定。
让我们来看看你看到的商店是否像英国的未来一样,是的,它看起来像复数。 再次深入观察这个词,
这里
商店根据英文语法打开复数,
isStoresOpen的输出不是复数,而是单数,或者你可以说它是编程约定的标量。
它出来是布尔,只是真或假
不像你的英文复数陈述真或假
不是一个真或假的数组,或不是一个真或假的集合
所以,在这里我们可以这样说,在这里我们关心的是从那个布尔bean方法返回的值,而不是给予类的属性指向真实世界实体的名称。
更重要的是,只要在类中使用这样的布尔属性,并且在任何框架中使用预定义的库,则使用前缀“ is ”的框架来检索布尔值,
为什么这意味着它比你更聪明,比如你知道复数/单数,复用器等英语语法…