Memberi nama bidang boolean yang merupakan kata kerja

14

Di Jawa, dengan pengambil konvensi dan penyetel untuk bidang boolean akan isField()dan setField(). Ini bekerja baik-baik saja dengan nama field yang kata sifat seperti active, visible, closed, dll

Tetapi bagaimana saya memberi nama bidang yang memiliki arti kata kerja haveChildren? Tambahkan "_ing" ke kata kerja ( ), mungkin?havingChildren

Untuk memperjelas, saya tidak memiliki kendali atas nama metode (pengambil dan penyetel) karena mereka dihasilkan secara otomatis oleh IDE. Jadi yang saya butuhkan adalah nama bidang yang tepat sehingga ketika IDE menghasilkan pengambil untuk itu, itu masuk akal. Sebagai contoh, hasChildrenadalah nama bidang yang sempurna, tetapi ketika IDE menghasilkan pengambil untuk bidang itu isHasChildren. Bagaimana saya mengatasi ini?

dnang
sumber
3
Jika ini adalah bidang bool, parentpasti berhasil.
yannis
2
Jika Anda bisa lolos dari membalikkan makna, 'childless' akan melakukannya.
Kilian Foth
3
Agak konyol harus melompat melalui lingkaran tentang nama bidang untuk menghindari masalah tata bahasa yang disebabkan oleh IDE. Apapun, berikut adalah beberapa saran tambahan, meskipun saya pikir yang sudah diberikan oleh orang lain lebih baik: adalah AllowedChildren, isNotEmpty, isContainer, isLeaf,
Dr. Wily's Apprentice
tanpa anak tampaknya menjadi cara untuk pergi. Masalah dengan induk adalah saya sudah memiliki bidang induk untuk menyimpan referensi ke objek induk. Saya pikir yang saya butuhkan adalah aturan umum untuk mengonversi semua kata kerja menjadi kata sifat untuk bidang boolean.
dnang
1
Saya setuju dengan @dnhang bahwa Anda seharusnya tidak membiarkan IDE mendikte hal-hal seperti ini. Memilih nama variabel dan metode penting untuk membuat kode Anda dapat dibaca, yang mana IDE itu ditulis harus tidak relevan.
Digitalex

Jawaban:

10

Jawaban singkat:

  • nama metode tidak dianggap mencerminkan implementasi internal tetapi perilaku yang diharapkan.

Jawaban panjang:

haveChildren()harus disebutkan namanya hasChildren().

Juga saya tidak melihat hasChildren()sebagai pengambil untuk anggota kelas boolean. Saya kira metode seperti itu akan mencari tahu apakah anggota tipe Collectionkosong atau tidak .

Nama default yang diberikan IDE untuk getter dan setter yang dihasilkan tidak dianggap sebagai undang-undang.

Poin lain: Antarmuka memiliki nama untuk metode yang belum diimplementasikan.

Jika nama metode diunggulkan untuk mencerminkan implementasi internal, bagaimana seseorang dapat mendesain antarmuka? Antarmuka tidak memiliki implementasi atau mereka tahu sebelumnya apa yang akan dilakukan oleh implementator di bawah tenda.

Ambil contoh Iteratorantarmuka di Java.

Ketika Anda menerapkan Iterator, bahkan ketika Anda memiliki nama anggota boolean next, Anda tidak perlu mengganti nama hasNext()menjadi isNext()atau isHavingNext(). Itu detail implementasi. Bahkan, saya sudah menerapkan Iteratordan apa yang saya lakukan adalah memiliki anggota dari jenis apa pun kelas saya memiliki daftar, bernama next(bukan boolean). hasNext()lalu kembali next!=null.

Juga, lihat ini:

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

Perhatikan bahwa isDead()tidak ada pengambil yang normal.

Ambil alat produktivitas IDE untuk apa adanya.

Tulains Córdova
sumber
3

Saya akan menyarankan mengubah nama bidang parentsehingga pengambil akan isParentdan setter akan setParent.

Anda juga dapat mencoba childPresentuntuk nama variabel dan isChildPresentdan setChildPresentsebagai pengambil dan penyetel.

Thirumalai Parthasarathi
sumber
1
Gagasan yang sama seperti komentar Yannis di atas tetapi masalahnya adalah saya sudah memiliki parentbidang untuk menyimpan referensi ke objek induk. Saya pikir yang saya butuhkan adalah aturan umum untuk mengonversi semua kata kerja menjadi kata sifat untuk bidang boolean.
dnang
0

Anda bisa meletakkan doessebelum kata kerja. Seperti doesHaveChildrendalam contoh yang Anda berikan. Atau mungkin shouldHaveChildrentergantung pada konteksnya.

miguel.martin
sumber
1
Masalahnya adalah, saya tidak memiliki kendali atas nama metode karena pengambil dan penyetel dihasilkan secara otomatis oleh IDE (misalnya Eclipse).
dnang
1
Cukup ganti nama metodenya? Tambahkan keybind untuk mengganti nama metode (jika Anda belum memilikinya).
miguel.martin
@dnhang jika itu adalah kode Anda, Anda dapat memanggil metode apa pun yang Anda suka, terlepas dari apa yang disebut oleh IDE ketika itu dihasilkan secara otomatis.
Richard
1
@ miguel.martin Salah satu alasan Anda tidak ingin melakukan ini adalah Java-beans. Asumsi isSomethingadalah bagian dari spesifikasi itu dan banyak asumsi dibuat di sekitarnya, untuk lebih baik atau lebih buruk, bertentangan dengan doesSomethingini dan akan menghancurkan hal-hal dengan cara yang tidak begitu jelas, yang mengarah ke bug.
0

Pertanyaannya sangat masuk akal. Kadang-kadang mengganti nama metode yang dibuat secara otomatis tidak cukup. Contoh: Kacang yang dikelola JSF diharapkan memiliki isXyz()metode pengambil boolean xyzproperti.

Saya setuju dengan BlackPanther yang menyarankan mengganti nama bidang ke parentdan menggunakan isParentsebagai nama metode. Menurut prinsip penyembunyian informasi, keterbacaan metode pengambil dan penyetel lebih penting daripada atribut.

Paulo Merson
sumber