Saya selalu mengalami kesulitan mencari tahu apakah saya harus menyebutkan metode tertentu dimulai dengan getSomething
versus findSomething
.
Masalahnya terletak pada pembuatan pembantu untuk API yang dirancang dengan buruk. Ini biasanya terjadi ketika mendapatkan data dari suatu objek, yang membutuhkan objek sebagai parameter. Ini adalah contoh sederhana:
public String getRevision(Item item) {
service.load(item, "revision");
// there is usually more work to do before getting the data..
try {
return item.get_revision();
}
catch(NotLoadedException exception) {
log.error("Property named 'property_name' was not loaded", exception);
}
return null;
}
Bagaimana dan mengapa harus memutuskan antara memberi nama metode ini sebagai getRevision()
atau findRevision()
?
Jawaban:
Saya menggunakan
Get
ketika saya tahu waktu pengambilan akan sangat singkat (seperti dalam pencarian dari tabel hash atau btree).Find
menyiratkan proses pencarian atau algoritma komputasi yang membutuhkan periode waktu "lebih lama" untuk dieksekusi (untuk beberapa nilai arbitrer lebih lama).sumber
find
dengan algoritma hash-table nanti?get
danfind
akan berlaku tergantung pada bagaimana itu digunakan.Saya akan mengatakan itu
find
mungkin gagal tetapiget
tidak seharusnya.sumber
find
dapat mengembalikan NULL sementaraget
tidak akan pernah mengembalikan NULL tetapi mungkin melempar (atau menegaskan), saya setuju.find()
pengembaliannyaOptional<>
? Dalam halfind
ini juganull
aman.Mengutip percakapan yang sering saya lakukan dengan anak-anak saya:
Gagasan yang sama berlaku:
gunakan "dapatkan" untuk metode yang mengembalikan sepotong informasi yang tersedia dengan harga murah (dan mungkin dapat diuraikan atau dioptimalkan), atau untuk sepotong informasi yang dimiliki secara unik oleh objek ini.
gunakan "find" untuk metode yang berfungsi untuk mendapatkan informasi, atau menggunakan objek lain untuk menemukannya.
sumber
Find menyiratkan tidak memiliki hasil, seperti ketika menjalankan query database dengan beberapa parameter yang dapat berubah di antara panggilan. Dapatkan, di sisi lain, menyiratkan hasil yang diketahui metode sebelumnya atau tidak akan berubah setelah diketahui, bahwa tidak ada parameter untuk panggilan.
Jadi, saya akan menggunakan misalnya Customer findCustomerById (long customerId) dan Customer getCustomer ()
sumber
Saya menerapkan pola berikut:
Foo GetFoo()
tidak dapat mengembalikan nol dan kompleksitasnya adalah O (log (n)) atau kurangbool TryGetFoo(out Foo)
dapat mengembalikan nol dan kompleksitasnya adalah O (log (n)) atau kurangFoo FindFoo()
tidak dapat mengembalikan nol dan kompleksitasnya lebih dari O (log (n))bool TryFindFoo(out Foo)
dapat mengembalikan nol dan kompleksitasnya lebih dari O (log (n))Dengan begitu kode ini cukup jelas tentang maksud dan kompleksitas yang dapat Anda harapkan.
Biasanya, Getters adalah untuk daftar langsung atau akses kamus / set.
Pencari adalah pencarian dalam, pemindaian daftar lengkap, dll ...
Dalam kasus Anda:
sumber
try
, pendek dan tepatget
cocok dalam kasus apa pun _ pada kenyataannya sering diasumsikan bahwa untuk mendapatkan sesuatu yang Anda perlu menemukan itu terlebih dahulu. Jadi, jika Anda tidak yakin, gunakanget
.Saya akan menggunakan
find
untuk metode sepertifindMinimum()
ataufindOptimal()
, yaitu di mana ada beberapa algoritma khusus yang menghitung nilai kembali, dan tidak hanya membuat permintaan ke DB, sistem file, server jauh, dll untuk menerima beberapa data.sumber
find
awalan dalam contoh yang Anda berikan. Untuk tugas komputasi, seperti yang ada dalam contoh Anda, saya akan menggunakancalculate
ataucompute
.Jangan gunakan temukan atau dapatkan awalan. Ini adalah pelanggaran UniformAccessPrinciple yang dibuat oleh bertrand meyer. Mengapa tidak membuat metode seperti berikut:
sumber
Saya biasanya akan menggunakan
Get
untuk mengambil sebuah objek / nilai, danFind
untuk mengambil nya lokasi (dalam array, misalnya).misalnya:
sumber
Bagi saya,
find
menyiratkan mungkin ada lebih dari satu hasil yang ada.get
menyiratkan hanya satu.sumber
getCat
vsfindCat
vsgetCats
vsfindCats
. Yangfind..
masih merupakan benda tunggal yang dikembalikan. Jamak harus ditambahkan ke kata benda, menurut pendapat saya.