我知道Java中用于布尔getter的约定包括前缀“is”。
isEnabled
isStoreOpen
但如果主题是复数怎么办?也就是说,如果不想知道商店是否开放,我想知道所有商店是否都开放了?
isStoresOpen()
用英语没有意义。
我很想写下这样的吸气鬼:
areStoresOpen
areDogsCute
areCatsFuzzy
而且我认为这是有道理的,但其他人告诉我,我应该把它搞砸并放弃主题动词协议并使用isStoresOpen
,isDogsCute
,isCatsFuzzy
。
无论如何,我应该怎么做对多个主题进行操作的布尔getter?
答案 0 :(得分:71)
如何拥有足够的英语并遵循Java标准:
isEveryStoreOpen()
或isEachCatCute()
如果对正确的单词有疑问,我总是喜欢打开词库。
答案 1 :(得分:56)
我不记得这是哪本书,但实质上是代码的读取次数比写的多很多次。写以便于阅读。
答案 2 :(得分:32)
惯例是在getter-method前加上“is”而不是变量本身。
e.g。
private boolean enabled;
public boolean isEnabled() {
return enabled;
}
和
private boolean storesOpen;
public boolean isStoresOpen() {
return storesOpen;
}
isStoresOpen()在英语中没有意义。
它在语法上可能没有意义,但它遵循惯例并且看起来足够可读。
答案 3 :(得分:18)
Java Bean规范说使用get
来获取getter,除非它是boolean
然后使用is
。 are
是非标准的,任何需要标准Bean命名的内容都不会识别它。
答案 4 :(得分:17)
许多工具需要is
或get
,并且不太可能识别are
。
尝试重新定义它们,例如getDogsAreFuzzy()
或getStoresAreOpen()
或类似的内容,以获得更好的兼容性和约定。
答案 5 :(得分:3)
- isEnabled()
也可以在getEnabled()
中写为Java naming conventions
。
- 遵循命名惯例只是一个好习惯,在使用Java Beans
时会有所帮助。
答案 6 :(得分:3)
一般来说,我认为代码应该尽可能容易读取,以便方法几乎可以作为段落读取(由Clean Code
支持)。因此,我会尽可能简单地将声音/读取的方法命名为are
的语法规则。使用现代IDE,很容易找到方法而不专门针对get
/ is
。
然而,库马尔对豆类提出了一个很好的观点。很多工具只会查找get
/ is
。在这种情况下,我可能会考虑使用这两种方法一个是为了便于阅读,一个是为了工具使用。
答案 7 :(得分:3)
您撰写的语言是什么?英语或 Java ?
当我正在阅读Java代码时,我希望事情存在,让我搜索两个getter,是和是前缀,将比只搜索一个前缀。
但另一方面,当我早上看报纸的时候,我不是在寻找任何东西,所以你可以用更传统的英语写作。
返回0;
答案 8 :(得分:2)
在你的问题中,你明确地询问了吸气剂。 getter返回有关您的类的一个实例的一些信息。例如,您有一个班级Store
。现在,isStoreOpen
是一个非常好的getter方法名称。
接下来,您将提及一种检查所有商店是否已打开的方法。这个方法根本不是getter,因为它不返回有关一个实例的信息,而是返回所有实例。当然除非有一个班级Stores
。如果是这种情况,您应该重新考虑您的设计,因为Java已经有了存储大量实例的方法,例如:数组或集合,因此您不必编写额外的类。
如果不是这种情况,则此方法名称完全正常。替代方案可能只是allStoresOpen
而没有'是'。
TL; DR:如果您正在处理多个实例,那么它不是一个吸气剂。如果是,你的设计很糟糕。
答案 9 :(得分:1)
在面向对象的编程中,这应该很少(如果有的话)发生,因为Store
或Cat
或者你应该是一个单独的类,它有自己的isOpen()
或{{ 1}}方法。如果您有更高的类型,请考虑拆分到您实际使用的更原子级别。通常,对象在最低级别不应该是复数。
答案 10 :(得分:1)
isStoresOpen()似乎是复数,
当您遵循Java命名约定和Java Bean标准时,它们已为布尔值和其他类型预定义了前缀,因此您应遵循Java Bean命名约定。
让我们来到你的观点 当您在英语预期中看到 storesOpen 时,是的,它看起来像复数。 再一次深入观察这个词,
下面
根据英语语法,storesOpen 是复数,
isStoresOpen 的出现不是复数,而是单数或者你可以说它在编程惯例方面是标量。
它的出现是布尔值,只是真或假
不喜欢您的英语复数陈述 true's 或 false's
不是 true 或 false 的数组,或者不是 true 或 false
所以,在这里我们可以说,这里我们关注的是从布尔bean方法返回的值,而不是给出类的属性指向真实世界实体的名称。
更重要的是,每当在类中使用这样的布尔属性并且任何框架中的预定义库使用这些属性时,那么使用前缀“ ”的框架用于检索布尔值,
为什么意味着它不像你那么聪明,因为你知道像复数/单数,多路复用器等英语语法......
答案 11 :(得分:0)
老实说,我会说绝对忘记are*
并坚持is*
。将"is"
视为变量含义,并在可能的情况下做出更好的名称。
我想说的是isStoresOpen听起来并不那么糟糕,但如果这对你来说听起来更好,你可以让isStoresAreOpen。
但我的一般想法是坚持惯例。哪个使用&#34; get&#34;对于吸气者和&#34;是&#34;对于布尔类型。我个人认为使用&#34;是&#34;有时候已经有问题了。是的 - 它确实看起来很好,如果&#34;条件,但有时我只是写&#34;得到&#34;在编码和检查我需要的变量的下拉列表并开始想知道什么是错的以及为什么我找不到它时,我意识到它始于&#34;是&#34; ... < / p>