Apakah pengidentifikasi pendek buruk? Bagaimana panjang pengidentifikasi berkorelasi dengan pemahaman kode? Apa faktor lain (selain pemahaman kode) yang bisa dipertimbangkan ketika datang ke penamaan pengidentifikasi?
Hanya untuk mencoba untuk menjaga kualitas jawaban atas, mohon perhatikan bahwa ada beberapa penelitian tentang subjek sudah!
Edit
Penasaran bahwa semua orang tidak berpikir panjang itu relevan atau cenderung lebih suka pengidentifikasi yang lebih besar, ketika kedua tautan yang saya berikan menunjukkan pengidentifikasi besar berbahaya!
Tautan Rusak
Tautan di bawah ini menunjuk pada penelitian tentang masalah ini, tetapi sekarang sudah rusak, saya sepertinya tidak memiliki salinan kertas itu, dan saya tidak ingat apa itu. Saya meninggalkannya di sini kalau-kalau ada orang lain yang tahu.
sumber
:
, seperti pada:(){ :;:& };:
- Saya akan mengatakan kebanyakan orang berpikir itu sangat buruk. ;)Jawaban:
"Aturan" terbaik yang pernah saya dengar adalah bahwa panjang nama harus proporsional dengan panjang ruang lingkup variabel. Jadi indeks
i
baik-baik saja jika tubuh loop adalah beberapa baris panjang, tapi saya suka menggunakan sesuatu yang sedikit lebih deskriptif jika bisa lebih panjang dari garis 15ish.sumber
for
lingkaran pendek , saya akan memberi nama indeks,customerCounter
atau sesuatu. Dibutuhkan sedikit usaha ekstra dan membuat kode Anda jauh lebih baik. Menggunakan variabel pendek untuk cakupan pendek kedengarannya seperti alasan untuk malas.i
danj
adalah nama umum yang setiap pengembang harus dapat memahami IMO.Setiap variabel harus memiliki makna, dan namanya adalah bagian dari makna itu. Dan bagian yang sangat penting, karena membantu pembaca untuk memahami apa itu tanpa menggali lebih dalam algoritma.
i
,j
Jelas untuk digunakan sebagai indeks, mereka pendek, tetapi sangat informatif.bnt
jelek,close
ataucloseButton
bermakna. Jadi pendek atau panjang bukan kriteria yang paling penting untuk nama variabel, itu harus bermakna. Makna sangat tergantung pada konteksnya. Misalnya, Anda dapat memberikan nama yang sangat pendek sepertin
ke variabel string lokal yang digunakan dalam blok kecil kode, katakan 10 baris dan merujuk ke nama properti (v
untuk nilai adalah contoh lain).Jadi nama variabel harus informatif dan tidak masalah mereka pendek atau panjang .
sumber
close = true
;)Saya akan menggunakan pengenal yang menggambarkan variabel, terlepas dari panjangnya.
Kasus-kasus i, j dan k ada di dalam diri mereka sendiri sehingga ada di mana-mana mereka menggambarkan diri, Anda secara otomatis tahu itu adalah indeks lingkaran. Anda juga bisa mengatakan hal yang sama untuk:
Namun, IDE sekarang menyediakan alat penyelesaian kode sehingga satu-satunya efek negatif dari pengidentifikasi deskriptif yang sangat panjang dan telah dihapus.
Saya akan dengan senang hati menambahkan dan menambahkan kata ke pengidentifikasi, jika diperlukan untuk menjelaskan tujuan variabel.
sumber
Mereka tidak seburuk pengidentifikasi yang menyesatkan. Saya tidak keberatan kode debugging di mana pengidentifikasi hanya satu huruf, tetapi saat konvensi penamaan yang berbeda datang ke gambar itu menjadi menjengkelkan. Misalnya, jika di suatu tempat Anda melihat
strPersonID
, dan kemudian di tempat lain yang Anda lihats_EmployeeID
, maka membingungkan untuk mengetahui apakah keduanya adalah string dan apakah ada perbedaan. Juga jika variabel disalin-paste (pmapIntString = new std::map<int,int>
) dan benar-benar salah, saya akan khawatir.Ketika sampai pada saya, saya menambahkan komentar dalam kode untuk variabel penting yang digunakan dan mencoba mempertahankan standar yang diberikan dalam pedoman pengembangan. Jika tidak ada standar maka saya mencoba untuk mempertahankan konvensi penamaan yang sama di seluruh kode.
sumber
Aku berjuang...
Saya selalu menggunakan nama deskriptif sebagai pengidentifikasi, tetapi akhir-akhir ini saya menggunakan pengidentifikasi yang sangat singkat.
Saya pikir, itu tergantung pada konteks kode:
Saya kira itu tergantung pada seberapa padat kodenya. Terkadang memiliki nama sebenarnya membuatnya lebih sulit untuk dibaca.
Kadang-kadang tanpa nama itu benar-benar samar!
sumber
Pemikiran saya adalah bahwa mereka tidak buruk dalam diri mereka tetapi mereka tidak informatif kecuali mereka sangat standar.
Jadi variabel loop menjadi i, j dan k sangat standar sehingga tidak ada alasan untuk tidak menggunakannya jika Anda membuat loop diindeks.
Tempat lain yang akan saya gunakan pengidentifikasi yang sangat singkat adalah ketika saya mendeklarasikan variabel sementara yang akan keluar dari ruang lingkup dalam beberapa baris waktu - variabel sementara dari loop foreach, misalnya. Jika tidak akan dirujuk ke tempat lain maka mudah bagi siapa saja yang membaca kode untuk melihat deklarasi dan mengikuti apa yang digunakan untuk itu. Jika itu akan digunakan untuk lebih dari lima atau enam baris, saya akan mencari untuk memberikan nama yang lebih jelas.
Di luar itu saya mencoba menggunakan pengidentifikasi panjang informatif - terutama di tingkat kelas saya ingin pengidentifikasi yang dapat Anda baca dan mendapatkan ide untuk variabel apa. Jika mereka terlalu lama (dan saya memang melihat kode kadang-kadang dengan empat atau lima kata dirangkai untuk pengidentifikasi) Saya cenderung menganggap itu sebagai bau kode - jika saya perlu banyak teks untuk membedakan variabel saya apakah mereka sebenarnya kelompok yang dapat lebih baik disimpan dalam hashmap atau daftar? Bisakah saya membuat semacam objek untuk memodelkan data ini dengan lebih akurat? Kadang-kadang Anda tidak bisa tetapi pengidentifikasi yang sangat panjang adalah indikator bahwa ada sesuatu yang layak dilihat di sini.
sumber
Saya sangat setuju dengan jawaban yang lain di sini, tetapi saya ingin menunjukkan satu faktor lain yang saya pikir sering diabaikan. Nama yang baik seringkali merupakan nama yang idiomatis terhadap kode. Ini bisa pada level bahasa, level algoritma atau beberapa idiom internal untuk basis kode yang ada. Intinya adalah bahwa meskipun nama tersebut tidak berarti apa-apa bagi seseorang yang tidak tahu domain kode, itu mungkin masih nama terbaik dalam konteks yang diberikan.
sumber
Memberi nama variabel selalu merupakan latihan dalam menyeimbangkan keunikan dan kelengkapan. Panjang nama terkait dengan keduanya, dengan cara yang berbeda. Nama yang lebih panjang lebih mudah dibuat unik; nama-nama panjang sedang cenderung lebih komprehensif daripada nama-nama yang terlalu pendek atau terlalu panjang.
Sebuah nama variabel yang sangat singkat hanya berguna jika memiliki sejarah yang membuatnya dipahami (misalnya,
i
,j
, &k
untuk indeks;dx
untuk jarak sepanjang sumbu) atau lingkup yang cukup kecil untuk semua referensi untuk terlihat sekaligus (misalnya ,temp
). Nama variabel terburuk di dunia adalah hal-hal sepertit47
. ("Apa artinya itu dan mengapa itu berbeda darit46
?") Syukurlah gaya penamaan sebagian besar keluar dengan FORTRAN, tetapi di sinilah keinginan untuk nama-nama variabel yang lebih panjang berakar.Seperti yang ditunjukkan makalah asli Anda, nama yang terlalu panjang juga sulit dibaca, karena perbedaan internal yang halus dapat terlewatkan ketika melihat kode. (Perbedaan antara
DistanceBetweenXAxisAbscissae
&DistanceBetweenYAxisAbscissae
sangat sulit untuk diambil dengan cepat.)Seperti yang ditunjukkan NoteToSelf sebelumnya, persyaratan untuk keunikan nama bergantung terutama pada cakupan nama yang harus unik. Indeks loop 5-garis bisa
i
; indeks dari catatan aktif yang diteruskan dari fungsi ke fungsi lebih baik memiliki nama yang lebih deskriptif.Variabel lokal ke fungsi dapat memiliki nama deskriptif kecil seperti
deltaX
tanpa masalah. Variabel delta X statis dalam modul harus memiliki nama yang membedakan deltaX ini dari deltaX lain di modul yang sama, membuatnya lebih lama. Dan variabel delta X global harus dibuat unik di semua modul dan semua modul lain yang mungkin dibuat, mungkin dengan menggabungkan nama modul ke nama deskriptif lainnya. Ini adalah salah satu dari banyak masalah dengan global; untuk menjadi unik, nama-nama itu harus cukup panjang untuk membuatnya sulit dibaca.sumber
Sebaliknya, saya pikir pengidentifikasi panjang lebih buruk daripada pengidentifikasi pendek (kecuali jika Anda berurusan dengan konstanta). Menggunakan
TheVariableThatHoldsTheCapacityOfMyContainerClass
membuat kode Anda jauh lebih rentan terhadap kesalahan daripada menggunakanCapacity
.sumber
var total = Capacity + Capacity2;
Apa yangCapacity
mengandung, dan apa yangCapacity2
mengandung? Untuk apa mereka digunakan? Harus mencari petunjuk konteks membuang waktu. Sedangkan jika itu ditulis seperti yangvar totalStorageCapacity = truckCapacity + trailerCapacity;
saya tahu apa yang kita bicarakan.Di, dan dari diri mereka sendiri, pengidentifikasi pendek tidak buruk. Tujuan memilih nama baik (pendek atau panjang) adalah untuk kejelasan kode. Memilih pengidentifikasi dalam layanan kejelasan kode lebih penting daripada memenuhi beberapa persyaratan panjang minimum. Secara umum apa artinya ini adalah menulis nama yang sedikit lebih lama bermakna.
sumber
Pengamatan yang saya miliki selama bertahun-tahun dan kurang hari ini dibandingkan 10 atau 15 tahun yang lalu. Programmer yang tidak bisa mengetik adalah orang yang akan bertarung melawan Anda dengan penamaan variabel. Mereka adalah orang-orang dengan semua nama variabel 1-3 huruf.
Jadi saran saya adalah menggunakan nama yang bermakna seperti yang dikatakan banyak komentator dan kemudian belajar mengetik. Saya telah mempertimbangkan untuk menambahkan tes pengetikan ke wawancara, hanya untuk melihat di mana orang-orang berada, tetapi saya mulai melihat jauh lebih sedikit orang yang tidak mengetik karena komputer menjadi bagian besar masyarakat.
sumber
i
dalam satu lingkaran sepertifor (int i=0; i<dst.size(); ++i) dst[i] += src[i]
harus dilarang oleh hukum.Makalah pertama yang Anda tautkan terlihat menarik, tetapi kesimpulannya adalah bahwa mereka tidak menemukan bukti signifikan untuk atau menentang hipotesis bahwa "petunjuk dasar", termasuk nama variabel yang bermakna, membantu dalam pemahaman kode. Tatapan waktu yang digunakan sebagai proksi untuk pemahaman kode yang menarik, tetapi bukan slam dunk.
Aku khawatir kertas kedua itu konyol. Masalah pertama adalah bahwa contoh-contoh nama panjang yang mereka berikan sangat panjang, tidak memberikan informasi tambahan. Saya pikir kita semua bisa sepakat bahwa membuat nama variabel lebih lama hanya untuk membuatnya lebih lama itu bodoh. Contoh mereka memberi nama variabel distance_between_abscissae daripada dx adalah manusia jerami.
Lebih penting lagi, percobaan mereka adalah ujian menghafal sederhana daripada pemahaman. Ini menguji kemampuan subjek untuk mengisi potongan-potongan nama variabel yang hilang ketika disajikan dalam daftar tanpa konteks. Ya, nama yang lebih panjang lebih sulit untuk dihafal, tetapi ketika saya mengkode saya tidak menghafal nama variabel, saya menggunakannya untuk memberikan konteks. Saya kira Anda bisa berpendapat bahwa kesulitan mengingat variabel panjang membuat kode lebih sulit untuk ditulis, tetapi kode dibaca jauh lebih sering daripada yang tertulis, jadi kegiatan mana yang harus dioptimalkan?
sumber
Salah satu metrik utama saya untuk menentukan apakah suatu baris kode dapat dibaca atau tidak adalah seberapa banyak konteks lain dari baris lain harus dibaca untuk benar-benar memastikan bahwa Anda memahami apa yang dilakukan oleh baris tersebut.
Sangat mudah untuk mengatakan bahwa "siapa pun harus dapat memahami bahwa i, j dan k adalah variabel loop". Dan seringkali itu sangat jelas. Tetapi saya masih mencoba untuk tetap rendah hati dan profesional dalam hal ini dan berasumsi bahwa mudah membuat kesalahan saat pemrograman. Jadi jika saya mengulang melalui array dari Grobbles saya akan memberi nama variabel grobbleIndex. Saya juga bisa menerima saya sebagai singkatan dari indeks. Ketika Anda menggunakan ij dan k lebih sulit untuk menemukan kesalahan seperti menggunakan indeks yang salah dengan array yang salah dan seterusnya. Dan itu semakin buruk ketika Anda memiliki lingkaran dalam.
PS. Pada saat saya menulis jawaban ini, saya sedang mengkode beberapa javascript pada laptop mini 10 "dengan layar split vertikal dalam vim dan saya masih meluangkan waktu untuk memberi nama variabel loop saya, barisIndex dan kolomIndex.
sumber
Dalam beberapa aplikasi, variabel pendek tidak bisa menjelaskan data dalam variabel. Pendek atau panjang tidak relevan. Menggunakan variabel yang lebih lama tidak membuat kode Anda lebih lambat. Tentu ini lebih banyak usaha mengetik nama variabel panjang tapi setidaknya orang yang membaca kode 6 bulan kemudian (yang mungkin Anda) akan dapat melihat apa yang terjadi tanpa perlu membuat jejak dengan asumsi itu bahkan mungkin.
sumber
Saya pikir idealnya adalah bahwa nama harus deskriptif kecuali ...
Gagasan bahwa nama dapat (mungkin harus) lebih pendek - dan dengan implikasi kurang deskriptif - jika mereka memiliki ruang lingkup yang terbatas hanya satu alasan untuk menyimpang dari yang ideal.
Secara pribadi saya sering menggunakan nama pendek untuk sejumlah kecil entitas yang direferensikan berulang kali. Subrutin khusus aplikasi yang sering disebut, misalnya.
sumber
Saya tidak akan pernah menggunakan nama pengenal dengan kurang dari 4-5 karakter, misalnya variabel loop mungkin Index atau jIndex atau kIndex tergantung berapa banyak loop batin yang saya butuhkan untuk menyelesaikan sesuatu, tetapi untuk nama lain katakanlah "kunci" yang akan saya gunakan "String LKey" atau "int LKey", "L" untuk lokal jika itu adalah variabel metode atau "F" untuk variabel kelas privat, semua pengidentifikasi lainnya seperti yang disebutkan sebelumnya sebelum saya harus menjelaskan alasan keberadaannya dalam nama itu, jika tidak, lingkup "pengidentifikasi" tidak berguna kan ?!
sumber