Apakah praktik yang baik untuk memanggil variabel metode kembali dengan nama variabel result
?
Misalnya:
public Zorglub calculate() {
Zorglub result = [...]
[...]
return result;
}
Atau haruskah saya beri nama berdasarkan jenisnya?
public Zorglub calculate() {
Zorglub zorglub = [...]
[...]
return zorglub;
}
Saya telah melihat keduanya di alam liar, jika saya harus memilih satu alasan apa yang bisa membuat saya lebih suka yang pertama atau yang terakhir (atau nama yang lebih baik)?
Saya terutama berpikir tentang Jawa.
programming-practices
naming
variables
Nicolas Raoul
sumber
sumber
ofTheJedi
digunakan untuk tujuan itu. Bukan rekomendasi, hanya mengatakan saya sudah melihatnya.Zorglub ofTheJedi = //...; return ofTheJedi;
Jawaban:
Jika ini adalah variabel metode, itu sangat tergantung pada keterbacaan.
Karena Anda sudah memiliki nama tipe di deklarasi variabel dan tipe metode pengembalian, Anda sebaiknya menggunakan
result
- itu adalah deskriptif peran variabel.sumber
Membaca silang menjadi lebih mudah jika variabel tersebut dinamai
result
. Ini membuat niat Anda jelas.sumber
Jika saya memerlukan variabel kembali (yang sebenarnya jarang terjadi), saya selalu memanggilnya
ret
dan selalu mendefinisikannya tepat di bawah kepala fungsi. Fungsi sudah memiliki nama, yang mengatakan semua tentang apa yang dikembalikan.Jika saya punya
myFunction
saya bisa menyebutkan itu variabel pengembalianmyFunctionReturnValue
untuk mengatakan hal yang persis sama, hanya saya harus mengatakannya secara eksplisit setiap saat. Karena fungsi umumnya harus singkat, tidak perlu untuk kesaksian seperti itu. Dan bahkan jika saya kehilangan jejak, saya dapat melompat ke deklarasi dan akan mendarat tepat di bawah definisi fungsi.Tetapi nama lain, yang tidak secara implisit (suka
ret
atauresult
) atau eksplisit (sukamyFunctionReturnValue
ataumyFunctionResult
) menyatakan, bahwa ini adalah variabel fungsi pengembalian saat ini terlalu generik.Dalam contoh kedua Anda
zorglub
adalah pilihan yang mengerikan. Semua pernyataan yang benar-benar memberi tahu saya adalah bahwa Anda membuat variabel, yang namanya sama dengan jenis anotasi yang ditemukan tepat di sebelah namanya. Ini tentang membantuint someInt
atauZorglub z
.Dalam contoh pertama Anda, ketika saya melihat kode, saya pertama kali melihat nama fungsi, yang memberitahu saya, bahwa fungsi ini menghitung a
Zorglub
. Ketika saya membaca baris kedua saya melihat "ok, ini zorglub, yang akan dikembalikan, tetapi ternyata tidak dapat segera dikembalikan dan karena itu disimpan dalamresult
variabel" (sebagai catatan: Jika Anda tidak akan menetapkan ulang nilai, maka Anda sebaiknya mendeklarasikan variabel final untuk mengkomunikasikannya), dan kemudian saya berpikir "jadi sekarang mari kita lihat apa yang terjadi padanya sebelum dikembalikan". Tidak seperti pada contoh pertama saya tidak perlu membaca lebih jauh dari itu untuk mengetahui bahwa ini adalah variabel, yang akan dikembalikan dan bahwa saya ingin mengikuti fungsi body jika saya ingin memahaminya.Anda mungkin ingin membaca tentang Pemrograman Spartan , yang agak terkait dengan pertanyaan Anda.
sumber
Container
. Jika saya memiliki metode yang mengubah kuantitas, saya bisa mengatakanvar container = getContainer(id); container.Quantity += 1;
Itu tentu dapat dibaca jika konteks metode ini hanya beroperasi pada satu wadah, dan hanya itu yang dilakukannya. MenyebutnyatheContainerWeAreGoingToAdjustTheQuantityOf
hanya konyol.user
(berlawanan denganuserToJoinThisDepartmentAndManager
? Atau apa yang akan menjadi pilihan Anda?)returnValue
, tetapiret
bersifat tradisional, sama sepertiint
danchar
.Dalam contoh kedua Anda, Anda mengonfigurasi jenis hasil dengan apa itu .
katakan saja itu Zorglub, dua kali. Tiga kali jika saya repot membaca jenis metode pengembalian. Namun,
misalnya, beri saya petunjuk tentang apa artinya nilai pengembalian , dalam hal semantik program. Mungkin atau mungkin tidak lebih jelas daripada hanya memanggilnya
result
, tergantung pada ukuran metode - itu panggilan penilaian untuk setiap metode IMO.sumber
Jika Anda bermain dengan banyak Zorglub objek dalam metode Anda, Anda "bisa" membuat kesalahan dan kembali yang salah, atau / dan Anda bisa tergoda untuk nama orang lain
zorglub1
,zorglub2
dllJika Anda menyebutkannya
result
, tidak ada kesempatan bagi Anda untuk melakukan kesalahan seperti itu. Plus, saya menemukan itu nama yang bagus; Saya juga sudah melihatreturnedValue
ataureturnedObject
beberapa kali, juga jelas meski agak panjang.sumber
Saya pribadi tidak sepenuhnya nyaman menggunakan
result
sebagai nama variabel. Cukup adil, ini memberitahu saya bahwa nilai yang terkait adalah hasil dari beberapa perhitungan - namun, saya kira itu benar untuk sekitar (atau lebih) 90% dari variabel / bidang yang digunakan dalam suatu program.Selain itu, sebagaimana dicatat beberapa jawaban lainnya, ini dapat digunakan untuk menandai nilai yang akan dikembalikan dari metode / fungsi. Namun, jika saya menjaga metode saya pendek, fokus pada melakukan satu hal saja dan tetap konsisten pada satu tingkat abstraksi, saya tidak akan memiliki banyak variabel lokal dan itu akan sepele untuk melihat apa metode yang akan dikembalikan.
Jadi saya lebih suka menjaga metode saya tetap pendek dan bersih, dan beri nama variabel saya untuk mengekspresikan arti dari nilai yang mereka pegang, daripada peran lokalnya di dalam metode terlampir. Namun, (misalnya dalam kode lama)
Zorglub result
mungkin lebih mudah dipahami daripadaZorglub zorglub
.sumber
result
karena itu adalah hasil dari beberapa perhitungan; itu disebutresult
karena ini adalah hasil dari perhitungan ini . Itu juga berfungsi sebagai artinya IMO, bahkan jika itu bukan makna yang paling spesifik. Mengekspresikan makna adalah emas, tetapi niat dan idiom juga bisa berharga. Dalam hal ini sedikit trade-off.if (result >= 0) numChars+=result; else break;
, Dan yang maknanya akan jelas dari perhitungan yang dipermasalahkan?) Menurut saya, nilainya yang akan dikembalikan dari ini fungsi harus disebutret
, sedangkan nilai yang telah kembali dari yang terakhir disebut fungsi harusresult
. Perhatikan bahwaresult
mungkin lebih bermakna daripada nama yang lebih panjang jika nilai pengembalian fungsi tersebut mis. Mewakili kuantitas atau kode kesalahan.result
atau apa kode sebenarnya pada tingkat yang lebih tinggi. Saya harus merujuk ke tempat itu diatur untuk melihat dari mana nilainya berasal dan apa itu. Sesuatu sepertiaddedChars
ataumatchedChars
akan lebih transparan dan membantu mengungkap apa yang dikerjakan kode tersebut, dan tidak memerlukan juggling mental ini dan yang terkaitresult = ...
:)result
dan kemudian memeriksa dengan kriteria itu akan tampak lebih alami daripada mencoba untuk datang dengan nama deskriptif yang mencakup semuanya.ret
bukannyaresult
tampak baik oleh saya. Ini agak kurang jelas menurut saya karena disingkat dan tidak seperti kata benda, tetapi jika digunakan secara konsisten maka itu setara denganresult
.Saya pribadi menggunakan nama
result
untuk nilai yang akan dikembalikan dari fungsi / metode. Itu membuatnya eksplisit bahwa itu adalah nilai yang akan dikembalikan. Memberinya nama berdasarkan jenis tampaknya tidak berguna, karena mungkin ada lebih dari satu variabel dari jenis yang sama.sumber
Apa bedanya? hanya ada 2 kata berbeda di sana yang akan melakukan hal yang sama sehingga masalah sebenarnya adalah mana yang terdengar lebih jelas bagi Anda?
"Hasil" atau "zorglub".
Saya lebih suka menggunakan
ZorglubResult
starter untuk melihat hasil yang kembali dariZorglub
lebih mudah untuk membandingkan dengan hasil lain yang Anda miliki dan hasilnya seperti yang Anda lihat ..sumber
Tidak pernah. Ini disebut Sistem Hungaria dan agak ketinggalan jaman oleh gagasan menggunakan program yang dapat menampilkan jenis variabel apa pun kapan pun Anda membutuhkannya.
sumber
Kapan pun Anda perlu memberi nama apa pun dalam kode, Anda harus memberikan nama yang deskriptif, bermakna, dan mudah dibaca. Kasus variabel kembali adalah contoh yang sangat baik di mana orang cenderung menjadi puas tentang penamaan.
Jika Anda memiliki fungsi yang diberi nama dengan jelas, dan Anda hanya perlu satu baris kode, maka Anda dapat melewati penamaan sepenuhnya. Membuat metode Anda pendek dan tujuan tunggal selalu ideal yang harus Anda tuju. Namun, itu adalah kasus yang kadang-kadang Anda perlu menyelesaikan fungsi dengan beberapa baris kode. Jika demikian, selalu disarankan untuk memberi nama variabel Anda agar sesuai dengan tujuan fungsi Anda.
Jika tujuan fungsi adalah untuk mengembalikan hasil perhitungan atau algoritma keputusan, maka
result
apakah nama yang cukup memadai untuk variabel Anda untuk digunakan, tetapi bagaimana jika fungsi Anda mengembalikan item dari daftar? Bagaimana jika fungsi Anda melayani beberapa tujuan lain yang tidak ada hubungannya dengan matematika atau daftar? Dalam kasus tersebut, lebih baik menyediakan variabel dengan nama yang bermakna yang terkait dengan mengapa fungsi itu dibuat. Tentu, Anda bisa menggunakan hasil jika Anda menginginkannya karena itu adalah nama yang tidak mungkin berbenturan dengan hal lain, namun dari perspektif keterbacaan, lebih masuk akal untuk memberi nama variabel Anda lebih bermakna dan sesuai konteks.sumber
Saya suka menggabungkan mereka, menunjukkan apa itu dan dimaksudkan untuk dikembalikan.
jadi dalam contoh Anda itu akan menjadi resultZorglub
jika apa itu tidak terlalu penting daripada hanya akan menghasilkan (bukan resulttring)
sumber
Saya tidak melihat banyak perbedaan antara menetapkan nilai kembali di beberapa titik dan kemudian menggunakan kondisional untuk melewati semua kode yang mungkin memodifikasinya, dan
return
segera, jadi saya langsung kembali, maka tidak adaresult
variabel.Jika Anda memiliki nilai antara yang mungkin atau mungkin tidak diubah oleh kode kondisional, maka itu bukan hasil (belum), jadi tentu tidak boleh dinamai demikian.
sumber
Ketika saya bekerja di C ++ dan saya kira ini mungkin berlaku di Java saya lakukan.
misalnya
Ini dirancang berdasarkan kontrak, karena blok yang dipastikan harus berada di akhir metode. Tetapi kembalinya harus menjadi yang terakhir. Kami memiliki aturan yang mengembalikan Hasil adalah satu-satunya hal yang dapat mengikuti blok jaminan.
sumber
Dalam fungsi rekursif, seringkali efektif untuk membawa hasil dari langkah ke langkah, untuk membuat optimasi panggilan ekor. Untuk memberi tanda kepada pengguna, bahwa ia tidak perlu memberikan parameter, masuk akal untuk memberi nama parameter "hasil":
Tetapi lebih sering saya menggunakan 'carry' dan 'sofar', yang saya lihat di alam liar, dan yang membawa ide itu sedikit lebih baik, dalam banyak kasus.
Alasan kedua tentu saja, jika topik Anda menyarankan kata '' hasil '', misalnya jika Anda melakukan evaluasi aritmatika. Anda bisa menguraikan rumus, mengganti variabel dengan nilai, dan menghitung hasilnya pada akhirnya.
Alasan ketiga telah dinyatakan, tetapi saya memiliki sedikit penyimpangan: Anda menulis metode yang melakukan beberapa pekerjaan, katakanlah itu mengevaluasi bentuk '' maks ''.
Alih-alih memanggil hasil '' hasil '', kita bisa menyebutnya '' maks '', tetapi dalam beberapa bahasa Anda dapat menghilangkan tanda kurung saat memanggil metode, jadi max akan menjadi panggilan rekursif ke metode itu sendiri.
Secara umum, saya lebih suka nama yang memberitahu, apa hasilnya. Tetapi jika nama itu sudah diambil, mungkin oleh lebih dari satu variabel, atribut atau metode, karena ada bidang GUI, representasi string, numerik dan satu untuk database, menggunakan yang lain meningkatkan kemungkinan kebingungan. Dalam metode pendek 3 sampai 7 baris, '' hasil '' seharusnya tidak menjadi masalah untuk sebuah nama.
sumber
Dalam Object Pascal ini bukan pilihan. Anda harus menetapkan nilai pada
Result
variabel di suatu tempat dalam kode fungsi.Contoh:
Jadi bagi saya cukup alami memiliki "Hasil" (atau "Retorno", karena saya mengejanya dalam bahasa Portugis untuk menghindari konflik nama dengan kata-kata yang disediakan bahasa) variabel untuk menerima nilai kembali.
Tentu saja, jika itu ekspresi yang sangat sederhana dalam bahasa yang diturunkan dari C, saya tidak akan repot-repot untuk mendeklarasikan variabel hasil - mengembalikan ekspresi secara langsung.
sumber
tidak hanya apa yang Anda beri nama hasilnya (saya khusus untuk 'r'), tetapi juga bagaimana digunakan. misalnya, jika Anda akan memiliki variabel kembali, maka setiap pernyataan kembali harus mengembalikannya. tidak punya 'return r;' pada akhirnya, tetapi taburkan hal-hal seperti 'kembalikan m * x + b; "di seluruh metode / fungsi. gunakan" r = m * x + b; return r; "sebagai gantinya.
sumber
hasilnya baik-baik saja. Saya dapat memahami kode dalam pandangan pertama sehingga nama variabel melayani tujuan tersebut.
sumber