Boole alanı için, alıcı / ayarlayıcı için adlandırma kuralı nedir?


178

Örneğin.

boolean isCurrent = false;

Alıcısına ve ayarlayıcısına ne isim veriyorsunuz?


2
JavaBeans'a atıfta bulunduğunuzu varsayıyorum, bu durumda @Jigar Joshi'nin cevabı doğru. Ancak, genel alıcı / ayarlayıcılar hakkında soruyorsanız, tek konvansiyon, yöntemlerin alan adını içermesi ve alıcı'nın hiçbir bağımsız değişken almaması ve bir değer döndürmesi, ayarlayıcının bir bağımsız değişken alması ve hiçbir değer döndürmemesi veya nesnenin kendisini döndürmesidir. alıcı / ayarlayıcılara başka bir yaklaşım örneği olarak bkz. Tampon.
Peter Lawrey

Yanıtlar:


255

Varsayalım

boolean active;

Erişimciler yöntemi

public boolean isActive(){return this.active;}

public void setActive(boolean active){this.active = active;}

Ayrıca bakınız


9
Sun'ın kod sözleşmelerinin boole alıcı isimlerinin özel olarak ele alındığı bölümünü gösterebilir misiniz? Onu bulamadım.
Konstantin Pelepelin

4
Boolean adlı bir dosya var hasCustomName, Şimdi onun alıcı ve ayarlayıcı yöntemleri için ne isim vermeliyim ? Mı setHasCustomName[setter]ve hasCustomName[getter]iyi?
Hadi

@Hadi sadece "customerName" değişkeninizi adlandırın ve bunun için getter n setter oluşturun. Beklenen alıcı ve ayarlayıcılar public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
Assegd

1
özel addan müşteri adına nasıl ulaştık? ;)
Kartik Chugh

1
@ Assegd "customerName" veya "customName" olarak adlandırmak kafa karıştırıcıdır ve boolean olduğunu göstermez. Değişkeni görünce bir isim içermesini beklerdim. Bu durumda, "hasCustomName" IMO olarak adlandırılmalıdır.
Nathan

83

http://geosoft.no/development/javastyle.html#Specific

  1. is Boole değişkenleri ve yöntemleri için önek kullanılmalıdır.

    isSet, isVisible, isFinished, isFound,isOpen

Bu, Java'nın çekirdek paketleri için Sun tarafından kullanılan mantıksal yöntemler ve değişkenler için adlandırma kuralıdır . İs önekini kullanmak, durum veya bayrak gibi kötü boole adlarını seçme konusunda sık karşılaşılan bir sorunu çözer. isStatus veya isFlag basitçe uymuyor ve programcı daha anlamlı isimler seçmeye zorlanıyor.

Boole değişkenleri için ayarlayıcı yöntemlerin öneki aşağıdaki gibi ayarlanmış olması gerekir:

void setFound(boolean isFound);

Bazı durumlarda daha iyi uyan is önekinin birkaç alternatifi vardır. Bunlar ön eklere sahiptir, olabilir ve olmalıdır:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;

7
Boolean özelliği varsa hasData, ayarlayıcı nasıl görünür? Kesinlikle, setData(bool hasData)benim için çok yanlış görünüyor ...
Franz B.

7
@FranzB. SetHasData (...) kullanırım
user362178 14:06

2
İsteyenler JavaBeans BELİRTİM izler için, görünüyor ki has, can, shouldönekler özelliklerinin bir parçası değildir. Referans JavaBeans Özellikler 1.01 bölüm 8.3.
VCD

@Andrew merhaba. Değişkenimde 'is' önekini kullandığımda ve bu değişkenin değerini verilerimdeki js dosyamdan gönderdiğimde, her zaman bana yanlış olarak değer veriyor. Ve eğer 'is' önekini kaldırırsam kesinlikle iyi çalışır. Bunun nedeni ne olabilir? Şimdiden teşekkürler.
Me_developer

1
Setter basittir, çünkü alıcı için boolean isIsCurrent(){...}başka türlü kullanmak zorunda kaldım , nesneyi serileştirmek için kullanılan çerçeve şikayet ediyordu getter not found for property isCurrent.
Maurizio Lo Bosco

67

Adlandırılmış bir alan için isCurrent, doğru alıcı / ayarlayıcı adlandırma setCurrent()/ isCurrent()(en azından Eclipse'in düşündüğü şey), son derece kafa karıştırıcı ve ana soruna kadar izlenebilir:

isCurrentÖncelikle alanınız çağrılmamalıdır . Is bir fiildir ve fiiller bir Object'in durumunu temsil etmek için uygun değildir. Bunun yerine bir sıfat kullanın ve aniden alıcı / ayarlayıcı adlarınız daha anlamlı olacaktır:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}

4
Boolean ilkel değilse ne olur? Eğer Boolean ise olsun veya olmalı mı?
Arun

2
Hayır, böyle bir yöntem null döndürerek NullPointerException özelliğine neden olabilir. Ama ilk başta Boolean dönmekten kaçınmaya çalışacağım
Sean Patrick Floyd

3
@Arun Ben / set Boolean nedeniyle ilkel yerine bir nesne ise set / get yerine set / get gerektiğini düşünüyorum, çünkü false, true veya null 3 istatistik vardır.
Al-Mothafar

1
Kullanarak IntelliJ varsayılan getbir alınırken önek Booleanvs isfor aboolean
jocull

1
@jocull ve JavaBeans şartnamesine göre doğru davranış budur
Sean Patrick Floyd

6

Ben inanıyorum olurdu:

void setCurrent(boolean current)
boolean isCurrent()

1
Bu sözleşmeyi seviyorum, ama sözleşmeler gerçekten önemli değil. En önemlisi, seçtiğinize sadık kalmaktır.
Clement Herreman

4
@Clement Sözleşmeleri yapmak Bu düzenleri kullandığımız araçlara güvenmek ne zaman olursa olsun. JavaBeans çok sayıda kütüphanede (JSP / JSF / Spring / Groovy sadece birkaç isim) geniş desteği olan bir kongre. Sözleşmeleri kırmak, bu kütüphanelerin çalışma şeklini kırmak demektir.
Sean Patrick Floyd

1
@Sean Right, yapılandırma konvansiyonlarına dayanan çerçeve hariç. Bu durumda sözleşmeler çerçeve tarafından uygulanır, bu yüzden hiçbir şey seçmezsiniz. İyi not.
Clement Herreman

5

Belki de bu cevabı gözden geçirmenin zamanı gelmiştir? Şahsen ben oy vereceğini setActive()ve unsetActive()(alternatifler olabilir setUnActive(), notActive(), disable()"setactive" beri, vb bağlama göre) ima bunu değil mi her zaman en etkinleştirin. "SetActive" demek sezgisel bir durum ama aslında aktif durumu kaldır.

Başka bir sorun, özellikle bir SetActive olayını CQRS yoluyla dinleyememeniz, bir 'setActiveEvent' dinlemeniz ve içinde dinleyici kaynağının gerçekten etkin olup olmadığını belirlemeniz gerekir. Veya elbette, arama yaparken hangi olayı arayacağınızı belirleyin, setActive()ancak daha sonra Endişelerin Ayrılması ilkesine aykırıdır.

Bununla ilgili iyi bir okuma Martin Fowler'ın FlagArgument makalesi: http://martinfowler.com/bliki/FlagArgument.html

Ancak, bir PHP arka plan geliyor ve bu eğilim giderek daha fazla kabul görüyorum. Bunun Java geliştirme ile ne kadar yaşadığından emin değilim.


-1
private boolean current;

public void setCurrent(boolean current){
    this.current=current;
}

public boolean hasCurrent(){
    return this.current;
}

3
şu an ne var? Ben hasPOJO için ise BO veya bazı işleme ile böyle bir hizmet için kullanılan düşünüyorum is. ve lütfen cevabınızla ilgili biraz açıklama ekleyin.
Al-Mothafar

-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

Booleans için şunları da kullanabilirsiniz:

public boolean isCurrent()

11
Çünkü OP, boole değerleri hakkında bir soru belirtir. 'Get' ön ekine sahip bir alıcı boole değerleri için asla kullanılmamalıdır (read: must).
Harold

-4

Bir ayarlayıcı olarak, nasıl:

// setter
public void beCurrent(boolean X) {
    this.isCurrent = X;
}

veya

// setter
public void makeCurrent(boolean X) {
    this.isCurrent = X;
}

Bu adlandırma ana dili İngilizce olan kişiler için anlamlı olup olmadığından emin değilim.


1
Gerçekten mantıklı değiller
Yannjoel

Ama fonetik olarak belki bazı özelliklerle umut verici geliyor :)
seba.wagner
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.