Untuk bidang boolean, apa konvensi penamaan untuk pengambil / penyetelnya?

178

Misalnya.

boolean isCurrent = false;

Apa nama pembuat dan penyetelnya?

pengguna496949
sumber
2
Saya berasumsi Anda merujuk ke JavaBeans dalam hal ini @Jigar Joshi jawaban benar. Namun jika Anda bertanya tentang pengambil / penetapan generik, satu-satunya kejelasan adalah bahwa metode berisi nama bidang dan pengambil tidak mengambil argumen dan mengembalikan nilai, setter mengambil satu argumen dan tidak mengembalikan nilai atau mengembalikan objek itu sendiri. lihat Buffer sebagai contoh pendekatan lain untuk rajin / giat.
Peter Lawrey

Jawaban:

254

Misalkan Anda punya

boolean active;

Metode pengakses akan menjadi

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

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

Lihat juga

Jigar Joshi
sumber
9
Bisakah Anda menunjukkan bagian konvensi kode Sun di mana nama pengambil boolean secara khusus dibahas? Saya tidak dapat menemukannya.
Konstantin Pelepelin
4
Saya memiliki boolean yang diajukan dengan nama hasCustomName, Sekarang apa yang harus saya beri nama untuk metode pengambil dan penyetelnya ? Apakah setHasCustomName[setter]dan hasCustomName[getter]bagus?
Hadi
@Hadi cukup beri nama variabel Anda "customerName" dan hasilkan pengambil dan penyetel untuk itu. Para pengambil dan penentu yang diharapkan adalah public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
Assegd
1
bagaimana kita dapat dari nama kustom ke nama pelanggan? ;)
Kartik Chugh
1
@ Assegd Memberi nama "customerName" atau "customName" membingungkan dan tidak menyatakan bahwa itu boolean. Melihat variabel yang saya harapkan mengandung nama. Dalam hal ini, itu harus disebut IMO "hasCustomName".
Nathan
83

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

  1. is awalan harus digunakan untuk variabel dan metode boolean.

    isSet, isVisible, isFinished, isFound,isOpen

Ini adalah konvensi penamaan untuk metode boolean dan variabel yang digunakan oleh Sun untuk paket inti Java. Menggunakan awalan adalah memecahkan masalah umum memilih nama boolean yang buruk seperti status atau bendera. isStatus atau isFlag tidak cocok, dan programmer dipaksa untuk memilih nama yang lebih bermakna.

Metode setter untuk variabel boolean harus telah menetapkan awalan seperti pada:

void setFound(boolean isFound);

Ada beberapa alternatif untuk awalan is yang lebih cocok dalam beberapa situasi. Ini memiliki awalan, dapat dan harus:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;
Narayan
sumber
7
Jadi jika ada properti boolean hasData, akan seperti apa penyetel itu? Pastinya, setData(bool hasData)kelihatannya sangat salah bagi saya ...
Franz B.
7
@ FranzB. Saya akan menggunakan setHasData (...)
user362178
2
Bagi mereka yang ingin mengikuti JavaBeans specifcation, tampaknya has, can, shouldprefiks bukan bagian dari spesifikasi. Referensi JavaBeans Spesifikasi 1.01 bagian 8.3.
VCD
@Andrew hai. Ketika saya menggunakan awalan 'is' dalam variabel saya dan mengirimkan nilai variabel itu dari file js saya dalam data, itu selalu memberi saya nilai sebagai false. Dan jika saya menghapus awalan 'is' daripada berfungsi dengan baik. Apa yang bisa menjadi alasan untuk itu? Terima kasih sebelumnya.
Me_developer
1
Setter ini mudah, untuk pengambil saya harus menggunakan boolean isIsCurrent(){...}sebaliknya kerangka yang digunakan untuk deserialize objek, mengeluh dengan getter not found for property isCurrent.
Maurizio Lo Bosco
67

Untuk bidang bernama isCurrent, penamaan pengambil / penyetel yang benar adalah setCurrent()/ isCurrent()(setidaknya itulah yang dipikirkan Eclipse), yang sangat membingungkan dan dapat ditelusuri kembali ke masalah utama:

Bidang Anda seharusnya tidak dipanggil isCurrentsejak awal. Is adalah kata kerja dan kata kerja tidak pantas untuk merepresentasikan keadaan Object. Gunakan kata sifat sebagai gantinya, dan tiba-tiba nama pengambil / penyetel Anda akan lebih masuk akal:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}
Sean Patrick Floyd
sumber
4
Bagaimana jika boolean bukan primitif? Jika itu adalah Boolean, apakah itu harus atau tidak?
Arun
2
Tidak, metode seperti itu bisa mengembalikan nol, yang akan menyebabkan NullPointerException. Tapi saya akan mencoba untuk menghindari mengembalikan Boolean di tempat pertama
Sean Patrick Floyd
3
@Arun Saya pikir itu harus di set / dapatkan sebagai gantinya jika diatur / karena Boolean adalah objek bukan primitif, karena memiliki 3 statistik, false, true atau null.
Al-Mothafar
1
IntelliJ secara default menggunakan getawalan saat mengambil Booleanvs isuntuk aboolean
jocull
1
@ jocull dan itu adalah perilaku yang benar, sesuai dengan spesifikasi JavaBeans
Sean Patrick Floyd
6

Saya percaya itu akan:

void setCurrent(boolean current)
boolean isCurrent()
miku
sumber
1
Saya suka konvensi itu, tetapi konvensi tidak terlalu penting. Yang paling penting adalah tetap dengan yang Anda pilih.
Clement Herreman
4
Konvensi @Clement lakukan peduli ketika Anda mengandalkan alat-alat yang menggunakan konvensi ini. JavaBeans adalah konvensi dengan dukungan luas di banyak perpustakaan (JSP / JSF / Spring / Groovy hanya untuk beberapa nama). Melanggar konvensi berarti melanggar cara kerja perpustakaan ini.
Sean Patrick Floyd
1
@Sean Right, dikecualikan untuk kerangka kerja yang mengandalkan konvensi atas konfigurasi. Dalam hal ini konvensi diberlakukan oleh kerangka kerja, sehingga Anda tidak memilih apa pun. Ucapan yang bagus
Clement Herreman
5

Mungkin sekarang saatnya untuk mulai merevisi jawaban ini? Secara pribadi saya akan memilih setActive()dan unsetActive()(alternatif bisa setUnActive(), notActive(), disable(), dll tergantung pada konteks) karena "setActive" berarti Anda mengaktifkannya setiap saat, yang tidak Anda lakukan. Ini semacam kontra intuitif untuk mengatakan "setActive" tetapi sebenarnya menghapus status aktif.

Masalah lain adalah, Anda tidak dapat mendengarkan secara khusus acara SetActive dengan cara CQRS, Anda perlu mendengarkan 'setActiveEvent' dan menentukan di dalam apakah pendengar benar-benar diaktifkan atau tidak. Atau tentu saja menentukan acara mana yang harus dihubungi saat menelepon setActive()tetapi itu kemudian bertentangan dengan prinsip Pemisahan Kekhawatiran.

Bacaan yang bagus tentang ini adalah artikel FlagArgument oleh Martin Fowler: http://martinfowler.com/bliki/FlagArgument.html

Namun, saya berasal dari latar belakang PHP dan melihat tren ini semakin banyak diadopsi. Tidak yakin berapa banyak ini hidup dengan pengembangan Java.

Christian Vermeulen
sumber
-1
private boolean current;

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

public boolean hasCurrent(){
    return this.current;
}
Mkne
sumber
3
sudah ada apa? Saya pikir hasdigunakan untuk BO atau layanan semacam itu dengan beberapa pemrosesan sementara untuk POJO itu is. dan tolong tambahkan deskripsi tentang jawaban Anda.
Al-Mothafar
-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

Untuk boolean Anda juga bisa menggunakan

public boolean isCurrent()
Suraj Chandran
sumber
11
Karena OP menyatakan pertanyaan tentang nilai boolean. Getter yang diawali dengan 'get' adalah (baca: harus) tidak pernah digunakan untuk nilai boolean.
Harold
-4

Sebagai setter, bagaimana dengan:

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

atau

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

Saya tidak yakin apakah penamaan ini masuk akal bagi penutur asli bahasa Inggris.

amekusa
sumber
1
Mereka tidak benar-benar masuk akal
Yannjoel
Tapi suara secara fonetis mungkin menjanjikan dengan beberapa atribut :)
seba.wagner