Bir fiil olan boole alanını adlandırmak


14

Java'da, boolean alanlar için kongre alıcı ve ayarlayıcı tarafından olacaktır isField()ve setField(). Bu gibi sıfatlar olan alan adları ile mükemmel çalışıyor active, visible, closedvb

Ama bir fiil anlamı olan bir alanı nasıl adlandırırım haveChildren? ( ) Fiiline "_ing" ekleyin , belki?havingChildren

Açıklığa kavuşturmak için, IDE tarafından otomatik olarak oluşturuldukları için yöntem adları (alıcı ve ayarlayıcı) üzerinde kontrolüm yok. İhtiyacım olan şey uygun bir alan adıdır, böylece IDE bunun için bir alıcı oluşturduğunda, duyular oluşturur. Örneğin, hasChildrenmükemmel bir alan adıdır, ancak IDE alan için alıcıyı oluşturduğunda olur isHasChildren. Bunu nasıl çözerim?


3
Bu bir bool alanı ise parent, işe yarayacaktı.
yannis

2
Eğer anlamı tersine çevirebilirsen, 'çocuksuz' hile olur.
Kilian Foth

3
IDE'nin neden olduğu dilbilgisi sorunlarından kaçınmak için bir alanın adı ile ilgili çemberlerden atlamak zorunda kalmak aptalca görünüyor. Ne olursa olsun, başkaları tarafından zaten verilenlerin daha iyi olduğunu düşünüyorum olsa da, bazı ek öneriler: isAllowedChildren, isNotEmpty, isContainer, isLeaf,
's Apprentice

çocuksuz gitmek için bir yol gibi görünüyor. Üst öğe ile ilgili sorun zaten üst nesneye başvuru tutmak için bir üst alan var. Tüm fiilleri boole alanları için sıfatlara dönüştürmek için genel bir kural olduğunu düşünüyorum.
dnang

1
@Dnhang ile bir IDE'nin böyle şeyler yapmasına izin vermemeniz gerektiğine katılıyorum. Değişken ve yöntem adlarının seçilmesi, kodunuzu okunabilir hale getirmek için önemlidir, hangi IDE'nin yazıldığına dikkat etmeniz gerekir.
Digitalex

Yanıtlar:


11

Kısa cevap:

  • yöntem adlarının dahili uygulamayı değil, beklenen davranışı yansıtacağı varsayılır.

Uzun cevap:

haveChildren()adlandırılmalıdır hasChildren().

Ayrıca hasChildren()mutlaka bir boolean sınıf üyesi için alıcı olarak görmüyorum . Böyle bir yöntem türünün bir üyesi Collectionboş olup olmadığını bulmak olurdu sanırım .

Bir IDE'nin oluşturulmuş alıcılara ve ayarlayıcılara verdiği varsayılan ad, taşla ayarlanmış bir yasa olarak kabul edilmez.

Başka bir nokta: Arayüzlerin henüz uygulanmayacak yöntemler için adları vardır.

Yöntem adlarının dahili uygulamayı yansıttığı varsayılırsa, birisi nasıl bir arayüz tasarlayabilirdi? Arabirimlerin bir uygulaması yoktur ve uygulayıcıların başlık altında ne yapacağını önceden bilmezler.

Örneğin, IteratorJava'daki arayüzü ele alalım .

Eğer uygulamak Iteratorbir boole üye adında olduğunda bile next, yeniden adlandırmak supossed verilmez hasNext()etmek isNext()veya isHavingNext(). Bu bir uygulama detayı. Aslında, uyguladım Iteratorve yaptığım şey, sınıfımın bir listesi olan, adlandırılan next(boole değil) türünde bir üyeye sahip olmak . hasNext()sonra geri döner next!=null.

Ayrıca, şuna bakın:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

Bunun isDead()normal alıcı olmadığını unutmayın .

IDE'lerin üretkenlik araçlarını oldukları gibi kullanın.


3

Alanın parentalıcı isParentve ayarlayıcı olması için yeniden adlandırılmasını öneririm setParent.

Ayrıca deneyebilirsiniz childPresentdeğişken adı ve için isChildPresentve setChildPresentalıcı ve ayarlayıcı olarak.


1
Yannis'in yukarıdaki yorumu ile aynı fikir ama sorun zaten parentüst nesneye referans tutmak için bir alan var . Tüm fiilleri boole alanları için sıfatlara dönüştürmek için genel bir kural olduğunu düşünüyorum.
dnang

0

doesFiilin önüne koyabilirsiniz . Sağladığınız doesHaveChildrenörnekte olduğu gibi . Ya da belki shouldHaveChildrenbağlama göre.


1
Sorun, getter ve ayarlayıcı IDE (örn. Eclipse) tarafından otomatik olarak üretildiği için yöntem adı üzerinde denetimim yok.
dnang

1
Sadece yöntemleri yeniden adlandırmak? Yöntemleri yeniden adlandırmak için bir anahtar bağlama ekleyin (henüz bir tane yoksa).
miguel.martin

@dnhang kodunuzsa, IDE'nin otomatik oluşturduğunda onları ne çağırdığına bakılmaksızın, yöntemleri istediğiniz gibi çağırabilirsiniz.
Richard

1
@ miguel.martin Bunu yapmak istememenizin nedenlerinden biri Java çekirdekleri. Varsayımı isSomethingbu şartnamenin bir parçasıdır ve etrafına birçok varsayım yapılır, daha iyi ya da daha kötüsü, buna karşı gitmek doesSomething, bir şeyleri çok açık olmayan yollarla bölebilir, hatalara yol açabilir.

0

Soru gayet makul. Bazen otomatik olarak oluşturulan yöntemin yeniden adlandırılması yeterli olmaz. Örnek: JSF tarafından yönetilen çekirdeklerin isXyz()bir boolean xyzmülkün alıcı yöntemi olarak olması beklenir .

Alanı yeniden adlandırmayı ve yöntem adı olarak parentkullanmayı öneren BlackPanther ile aynı fikirdeyim isParent. Bilgi gizleme ilkesine göre, alıcı ve ayarlayıcı yöntemlerinin okunabilirliği, özniteliklerden daha önemlidir.

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.