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, hasChildren
adalah nama bidang yang sempurna, tetapi ketika IDE menghasilkan pengambil untuk bidang itu isHasChildren
. Bagaimana saya mengatasi ini?
parent
pasti berhasil.Jawaban:
Jawaban singkat:
Jawaban panjang:
haveChildren()
harus disebutkan namanyahasChildren()
.Juga saya tidak melihat
hasChildren()
sebagai pengambil untuk anggota kelas boolean. Saya kira metode seperti itu akan mencari tahu apakah anggota tipeCollection
kosong 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
Iterator
antarmuka di Java.Ketika Anda menerapkan
Iterator
, bahkan ketika Anda memiliki nama anggota booleannext
, Anda tidak perlu mengganti namahasNext()
menjadiisNext()
atauisHavingNext()
. Itu detail implementasi. Bahkan, saya sudah menerapkanIterator
dan apa yang saya lakukan adalah memiliki anggota dari jenis apa pun kelas saya memiliki daftar, bernamanext
(bukan boolean).hasNext()
lalu kembalinext!=null
.Juga, lihat ini:
Perhatikan bahwa
isDead()
tidak ada pengambil yang normal.Ambil alat produktivitas IDE untuk apa adanya.
sumber
Saya akan menyarankan mengubah nama bidang
parent
sehingga pengambil akanisParent
dan setter akansetParent
.Anda juga dapat mencoba
childPresent
untuk nama variabel danisChildPresent
dansetChildPresent
sebagai pengambil dan penyetel.sumber
parent
bidang 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.Anda bisa meletakkan
does
sebelum kata kerja. SepertidoesHaveChildren
dalam contoh yang Anda berikan. Atau mungkinshouldHaveChildren
tergantung pada konteksnya.sumber
isSomething
adalah bagian dari spesifikasi itu dan banyak asumsi dibuat di sekitarnya, untuk lebih baik atau lebih buruk, bertentangan dengandoesSomething
ini dan akan menghancurkan hal-hal dengan cara yang tidak begitu jelas, yang mengarah ke bug.Pertanyaannya sangat masuk akal. Kadang-kadang mengganti nama metode yang dibuat secara otomatis tidak cukup. Contoh: Kacang yang dikelola JSF diharapkan memiliki
isXyz()
metode pengambilboolean xyz
properti.Saya setuju dengan BlackPanther yang menyarankan mengganti nama bidang ke
parent
dan menggunakanisParent
sebagai nama metode. Menurut prinsip penyembunyian informasi, keterbacaan metode pengambil dan penyetel lebih penting daripada atribut.sumber