Apakah penggunaan variabel satu huruf didorong di Jawa? Dalam cuplikan kode atau tutorial, Anda sering melihatnya. Saya tidak bisa membayangkan menggunakan mereka didorong karena membuat kode relatif lebih sulit untuk dibaca dan saya tidak pernah melihat mereka digunakan dalam bahasa pemrograman lain!
java
coding-standards
variables
William Edwards
sumber
sumber
Jawaban:
Penamaan yang benar itu sulit. Sangat keras. Jika Anda melihatnya dengan cara lain, Anda juga dapat menganggap ini berarti bahwa hal-hal yang disebutkan dengan benar itu penting. (Kalau tidak, mengapa Anda menghabiskan upaya penamaan itu?)
Tapi, kadang-kadang, nama-nama hal itu tidak penting. Itu sebabnya kami memiliki hal-hal seperti fungsi anonim ("lambdas"), misalnya: karena kadang-kadang tidak layak untuk menyebutkan hal-hal.
Ada banyak contoh, di mana nama variabel satu huruf (atau sangat pendek) sesuai:
i
,j
,k
,l
Untuk indeks lingkarank
danv
untuk kunci dan nilai dalam petan
untuk nomor (misalnya dalamMath.abs(n)
)a
,b
,c
Untuk sewenang-wenang objek (misalnya dimax(a, b)
)e
untuk elemen dalamfor each
loop generikf
untuk fungsi dalam fungsi tingkat tinggip
untuk fungsi predikat dalam filterT
,T1
,T2
, ... untuk jenis variabelE
untuk variabel tipe yang mewakili tipe elemen koleksiR
untuk variabel tipe yang mewakili tipe hasil suatu fungsiex
untuk pengecualian dalamcatch
klausaop
untuk operasi di peta atau lipats
untuk menunjukkan jamak, yaitu koleksi (misalnyans
untuk koleksi angka,xs
danys
untuk dua koleksi acak objek)Mereka sangat umum di hampir setiap bahasa yang saya tahu (dan kemungkinan juga pada yang saya tidak tahu.) Haskell, F #, ML, Ruby, Python, Perl, PHP, C #, Jawa, Scala, Groovy, Boo, Nemerle, D, Go, C ++, C, sebut saja.
sumber
k
danl
dalam indeks lingkaran, itu terlalu jauh (Anda seharusnya tidak memiliki banyak loop bersarang untuk memulai; ekstrak mereka ke fungsi) . Secara pribadi, saya tidak pernah menggunakan lebih dari satu variabel 1 huruf per fungsi, tetapi saya membidik untuk 0.l
ataulen
digunakan untuk panjang danarr
untuk array (misalnya:)for(var i=0; l=arr.length; i<l; i++)
. Selain itu,fn
dapat digunakan sebagai gantif
, saat Anda merujuk ke suatu fungsi.Jika loop Anda tidak melakukan apa-apa selain menggunakan variabel untuk menghitung
maka ya, ini adalah nama terbaik yang bisa Anda gunakan. Apa pun yang lebih lama tidak mungkin membuat semantik menjadi lebih jelas, tetapi membutuhkan waktu lebih lama untuk membaca.
Jika variabel digunakan di dalam loop, nama yang bermakna dapat bermanfaat.
Jika variabel Anda digunakan di seluruh metode, namanya harus lebih panjang; jika digunakan di seluruh kelas, namanya lebih baik dijelaskan sendiri, kalau tidak pasti akan mengurangi kejelasan kode Anda.
Singkatnya, semakin besar cakupan variabel, semakin panjang namanya.
sumber
index
saat iterasi di atas array, misalnya.i
adalah kata yang tepat dengan makna yang didefinisikan secara tepat, yaitu "indeks Anda tidak perlu terlalu khawatir tentang". Tapi saya kira itu masalah keakraban. Jika Anda membaca banyak Haskell, Anda akan terbiasa membacam
sebagai monad ,f
sebagai functor ,x
karena beberapa objek ,xs
sebagai daftarx
s dan sebagainya.i
adalah "nama terbaik yang bisa Anda gunakan" untuk loop yang menggunakan variabel hanya untuk menghitung. Dalam hal ini, saya lebih suka melihatcount
digunakan sebagai nama variabel: langsung dimengerti.for (int count = 0; count < 10; count++)
atauwhile (count--)
.Membaca kode dalam jawaban Kilian, saya tidak berpikir "ada loop, dan ada variabel, dan memiliki tipe int, dan itu memiliki nama, dan namanya adalah i, dan itu diinisialisasi ke 0,. .. " Saya hanya berpikir "lingkaran ..." di mana tiga titik berdiri untuk detail tidak penting yang bahkan tidak saya pikirkan. Dalam benak programmer saya, variabel itu tidak benar-benar ada, itu hanya sebuah artefak yang harus saya ketik, seperti for (;;) {} yang membuatnya menjadi loop.
Karena variabel itu bahkan tidak ada dalam pikiran saya, mengapa saya memberinya nama, di luar apa yang mutlak diperlukan?
sumber
i
, tetapi_
untuk variabel yang jelas tidak berarti. Tetapi tidak semua orang akrab dengan Prolog, dan itu mungkin akan membuat lebih banyak perhatian daripada menghapus.for (...)
header._
merupakan pengidentifikasi hukum seperti yang lainnya, ada perubahan baru-baru ini bahwa variabel lokal yang tidak digunakan bernama_
(atau dimulai dengan_
) tidak menghasilkan peringatan "variabel lokal yang tidak digunakan", meskipun Ruby biasanya memperingatkan mereka.Jika Anda merujuk ke huruf i, j, k sebagai indeks dalam satu lingkaran, itu adalah praktik yang umum di Jawa dan bahasa pemrograman lainnya. Meskipun ada mungkin lebih baik menggunakan untuk setiap loop gaya, seperti
dari pada
Di Jawa, gaya perulangan hanya diperkenalkan cukup baru-baru ini. Mungkin itulah sebabnya Anda lebih memperhatikannya untuk Java, karena mengulang indeks yang digunakan untuk menjadi cara yang paling umum untuk mengulang array atau daftar.
Ada beberapa kasus lain di mana huruf tunggal mungkin sesuai, seperti ketika menerapkan fungsi matematika di mana huruf tunggal seperti n, x, atau y, mungkin sudah umum. Tetapi secara umum, tidak, beri nama variabel Anda sesuatu yang bermakna.
sumber