Java boole alıcıları "eşittir" ve "eşittir"


92

Java'da mantıksal alıcılar için konvansiyonun "is" önekini içerdiğini biliyorum.

isEnabled
isStoreOpen

Peki ya özne çoğulsa? Yani, bir mağazanın açık olup olmadığını öğrenmek yerine, tüm mağazaların açık olup olmadığını bilmek istersem ne olur?

isStoresOpen() İngilizce'de mantıklı değil.

Gibi alıcılar yazmak cazip geliyor:

areStoresOpen
areDogsCute
areCatsFuzzy

Ve bunun mantıklı olacağını düşünüyorum, ama ben sadece o kadar emmek ve anlaşması ve kullanım fiil konuyu terk gerektiğini başkaları tarafından söylendi isStoresOpen, isDogsCute, isCatsFuzzy.

Her neyse, çoğul bir konuda çalışan boole alıcıları için ne yapmalıyım?


3
Bir are*()alıcıdan önce hiç görmedim .
rekire

21
are*()Dilbilgisi olarak doğruysa her zaman alıcı yazarım .
Dondurulmuş Peas Roddy

2
Nesneniz bir fasulye ise, bence ya ya isda has...
assylias

4
are * () alıcı kullanıyorsanız, çoğu durumda boolean [] döndürmelidir, sanırım.
Juvanis

2
Çok güzel soru. Bunu ben de biraz merak ettim. Yanıtların çoğunun zaten işaret ettiği gibi, çoğu çerçeve, IDE ve karşılaştığım bir kurala dayanan her şey "get" / "set" / "is" kalıbını kullanıyor. Bu, uygulamanızda bir sorun olmasa bile, bu kuralı ne olursa olsun takip ederim - tutarlı bir adlandırma kuralını sürdürürseniz (bazen dilbilgisi açısından tuhaf gelse bile kodunuzu takip etmek (sizin tarafınızdan bile) çok daha kolay olacaktır. ).
Paul Richter 1812

Yanıtlar:


58

Bunun hangi kitaptan olduğunu hatırlayamıyorum ama işin özü, kodun yazıldığından çok daha fazla okunacağıdır. Okunabilirlik için yazın.


21
Temiz Kod - Robert Martin
John B

John B: O kitabı okumadım; belki bir referans okudum. Yine de listem için başka bir kitap. :)
John

8
Ama çok dikkatli ol, fazla ileri gitme. storesAreOpen()muhtemelen en gramer olacaktır (çünkü if(storesAreOpen())), ancak adın boole kısmı artık yöntem adının ortasında gizlenmiştir ve bu da Java kurallarını ve okunabilir kodu bozar.
Izkata 18'12

3
Soruyu çok genel bir şekilde yanıtlıyor. Ayrıntılara değinmediği doğru, ama bu bir cevap. Basmakalıp görünebilir, ancak bir değeri vardır (en az 24 kişi öyle düşünüyor).
George Stocker

4
Cevabı netleştirmek için burada areStoresOpen () iyi bir seçim olduğunu ekleyeceğim .
kiedysktos

96

Yeterince iyi İngilizce'ye ve Java standardına uymaya ne dersiniz?

isEveryStoreOpen() veya isEachCatCute()

Doğru kelimeden şüphe duyduğumda her zaman eşanlamlılar sözlüğünü doldurmayı severim.


19
+1, bu, belirsiz isStoresOpen () 'den farklı olarak döndürülen değerinEveryStoreOpen () mı yoksa isAnyStoreOpen () mı olduğunu açıkça gösterir.
Imre

5
+1 Kabul edilen cevap bu olmalı! Java booleannın isönek kuralını korurken dilbilgisi açısından anlamlıdır . Ayrıca, kod tabanını koruyan anadili İngilizce olmayanlar için gerçekten yararlı olacak biraz ekstra bilgi sağlar .
higuaro

1
Bu cevap hayatımı değiştirdi! Ve kabul edilen cevap olmalıdır.
Marcel Blanck

34

Kural, getter yönteminin önüne variale değil "eşittir" önekini vermektir.

Örneğin

private boolean enabled;

public boolean isEnabled() {
    return enabled;
}

ve

private boolean storesOpen;

public boolean isStoresOpen() {
    return storesOpen;
}

isStoresOpen () İngilizce'de bir anlam ifade etmiyor.

Dilbilgisi açısından anlam ifade etmeyebilir, ancak geleneği takip eder ve yeterince okunabilir görünür.


Cevabınız mantıklı ve minnettarım. Bence yetkili bir doğru / yanlış pozisyondan haklısın. Açıkça, net ve anlaşılması kolay olarak bize yardımcı olmayı amaçlayan bir konvansiyonun, kurallarına bağlı kalmak adına bu amacı terk etmesini istemiyorum. Ama haklısın - bu böyle ve ben de bunu sordum.
kodai

@kodai: Bence bu bir kural olarak değil, sadece bir kongre olarak düşünülmelidir. Ama ben inanıyorum ki, kuralları takip etmeden kod yazmak, eğer gerekli değilse, kodu okunabilir kılmak için gidilecek yol.
Bhesh Gurung

18

Java Bean spesifikasyonu, daha sonra kullanılmadığı getsürece alıcılar için kullanılacağını söylüyor . standart değildir ve standart Bean adlandırmasını bekleyen hiçbir şey tarafından tanınmayacaktır.booleanisare


17

Pek çok araç beklemektedir isveya gettanımayacaktır are.

Gibi onları rephrasing deneyin getDogsAreFuzzy()veya getStoresAreOpen()veya daha iyi uyumluluk ve kongreler için buna benzer şeyler.


Evet. Fasulye yardımcı programları gibi araçlar , mantıksal alıcıları bulmaktır.
nalply

4

- isEnabled() Ayrıca olarak yazılabilir getEnabled()içinde Java naming conventions.

- Adlandırma kurallarına uymak, birlikte çalışırken yardımcı olmak iyi bir alışkanlıktır Java Beans.


3

Genel olarak, bir yöntemin neredeyse bir paragraf olarak okunabilmesi için (benimsediği gibi Clean Code) kodun olabildiğince kolay okunabilir olması gerektiğini düşünüyorum . Bu nedenle, mümkün olduğunca kolay ses / okuma yöntemini adlandırır ve gramer kuralı ile devam eder are. Modern IDE'lerle, özellikle get/ ifadesine bakmadan yöntemleri bulmak kolaydır is.

Ancak Kumar, fasulye konusunda iyi bir noktaya değiniyor. Birçok araç yalnızca get/ öğesini arayacaktır is. Bu durumda her iki yönteme de sahip olmayı düşünebilirim. Biri okuma kolaylığı ve diğeri alet kullanımı içindir.


3

Hangi dilde yazıyorsun: İngilizce mi Java mı?

Java kodunu okurken her şeyin orada olmasını bekliyorum, is ve are önekleriyle birlikte her iki alıcıyı da aramamı sağlamak, tek bir önek aramaktan daha karmaşık olacaktır.

Ancak öte yandan sabah gazete okuduğumda hiçbir şey aramıyorum, bu yüzden daha geleneksel İngilizce yazabilirsiniz.

dönüş 0;


3

Sorunuzda açıkça alıcılar hakkında soru soruyorsunuz. Alıcı, sınıfınızın bir örneği hakkında bazı bilgiler döndürür. Örneğin bir sınıfınız var Store. Şimdi, isStoreOpenalıcı için mükemmel bir yöntem adıdır.

Ardından, tüm mağazaların açık olup olmadığını kontrol eden bir yöntemden bahsediyorsunuz. Bu yöntem bir alıcı değildir, çünkü tek bir örnek hakkında değil, hepsi için bilgi döndürür. Tabii bir sınıf olmadıkça Stores. Durum böyleyse, tasarımınızı yeniden düşünmelisiniz, çünkü Java zaten bir dizi örneği, örneğin dizileri veya koleksiyonları depolamak için yollar vardır, böylece fazladan sınıflar yazmak zorunda kalmazsınız.

Durum böyle değilse, bu yöntem adı mükemmeldir. Bir alternatif allStoresOpen, 'olan' olmadan olabilir .

TL; DR: Birden fazla örnekle uğraşıyorsanız, bu bir alıcı değildir. Öyleyse tasarımınız kötüdür.


2

Dürüst olmak gerekirse, kesinlikle unutun are*ve sadık kalın derim is*. "is"Değişken anlamı olarak düşünün ve mümkünse daha iyi bir isim verin.

İsStoresOpen'ın kulağa o kadar kötü gelmediğini söyleyebilirim, ancak sizin için daha iyi geliyorsa isStoresAreOpen yapabilirsiniz.

Ancak genel fikrim, geleneklere bağlı kalmak olacaktır. Alıcılar için "get" ve boole türleri için "is" kullanır. Şahsen ben "eşittir" kullanmanın bazen zaten sorunlu olduğunu düşünüyorum. Evet - "eğer" koşullarında iyi görünüyor, ancak bazen kodlarken "get" yazıyorum ve gerekli değişkenim için açılır listeyi kontrol ediyorum ve neyin yanlış olduğunu ve neden bulamadığımı merak etmeye başlıyorum, sonra farkına varıyorum "is" ile başlar ...


1

Hiç eğer nesne yönelimli programlama, bu nadiren beri gerçekleşmesi gereken Storeya Catya da ne kendi ile, ayrı bir sınıf olmalıdır var isOpen()ya isFuzzy()yöntemle. Daha yüksek bir türe sahipseniz, gerçekte kullandığınız daha atomik seviyeye bölmeyi düşünün. Genel olarak nesneler en düşük seviyede çoğul olmamalıdır.


1

Bu Mağazalardaki isStoresOpen () , çoğul gibi görünüyor,

Java Adlandırma Kuralı ve Java Fasulyesi Standartlarını takip ettiğinizde, boole ve diğer türler için önceden tanımlanmış öneklere sahip olduklarından, Java Fasulyesi Adlandırma Kuralı'na uymalısınız.

Hadi senin amacına gelelim StoresOpen'ı İngilizce bir olasılıkla gördüğünüzde , evet çoğul gibi görünüyor. Bir kez daha bu kelimeye derinlemesine gözlem yapın,

Buraya

storeOpen , İngilizce gramerine göre çoğuldur,

Üzerinden gelip isStoresOpen bunun tekil olduğu yerine, çoğul değil ya da bunu kongre programlama açısından skalerdir söyleyebiliriz.

Çıktı boolean, sadece doğru ya da yanlış

İngilizce çoğul ifadeniz doğru veya yanlış gibi değil

Değil bir dizi gerçek veya yanlış bir veya bir koleksiyonlarında gerçek veya FALSE

Yani burada diyebiliriz ki, burada gerçek dünya varlığını işaret etmek için sınıfın özelliğine verilen adla değil, o boole fasulyesi yönteminden dönüş olan değerle ilgileniyoruz.

Daha önemli bir şey de, bu tür boole özellikleri sınıflarda kullanıldığında ve bunlar herhangi bir çerçevede önceden tanımlanmış kütüphaneler tarafından kullanıldığında, boole değerlerini almak için ' is ' önekini kullanan çerçeve ,

çoğul / tekil, çoğullayıcı vb. gibi İngilizce grameri bildiğiniz için neden sizden daha akıllı olmadığı anlamına gelir ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.