Apakah ada alasan untuk nama variabel pendek?

140

Ini menjadi frustrasi besar dengan basis kode yang saat ini saya kerjakan; banyak nama variabel kami pendek dan tidak deskriptif. Saya satu-satunya pengembang yang tersisa di proyek ini, dan tidak ada dokumentasi mengenai apa yang dilakukan kebanyakan dari mereka, jadi saya harus menghabiskan waktu ekstra untuk melacak apa yang mereka wakili.

Sebagai contoh, saya membaca beberapa kode yang memperbarui definisi permukaan optik. Variabel yang ditetapkan pada awal adalah sebagai berikut:

double dR, dCV, dK, dDin, dDout, dRin, dRout
dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1));
dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1));
... and so on

Mungkin hanya saya, tetapi pada dasarnya tidak memberi tahu saya apa yang mereka wakili, yang membuat memahami kode semakin sulit. Yang saya tahu adalah bahwa itu adalah variabel yang diuraikan baris tertentu dari tabel tertentu, di suatu tempat. Setelah beberapa pencarian, saya menemukan apa artinya:

dR = radius
dCV = curvature
dK = conic constant
dDin = inner aperture
dDout = outer aperture
dRin = inner radius
dRout = outer radius

Saya mengganti nama mereka menjadi apa yang saya miliki di sana. Itu memperpanjang beberapa garis, tapi saya merasa itu adalah trade off yang adil. Namun skema penamaan semacam ini digunakan di banyak kode. Saya tidak yakin apakah itu artefak dari pengembang yang belajar dengan bekerja dengan sistem yang lebih lama, atau jika ada alasan yang lebih dalam di baliknya. Apakah ada alasan yang baik untuk menamai variabel dengan cara ini, atau apakah saya dibenarkan memperbarui mereka menjadi nama yang lebih deskriptif saat saya menjumpai variabel?

KChaloux
sumber
98
Tampak bagi saya bahwa dalam kasus tertentu, itu adalah nama variabel yang disalin langsung dari rumus matematika lama.
Dave Nay
1
satu-satunya alasan yang akan saya terima adalah "Rekan saya mengatakan tidak apa-apa setelah meninjau kode"
agas
35
Jika Anda menemukan diri Anda tidak dapat memahami kode matematika karena nama variabel pendek, perlu diketahui bahwa itu mungkin karena Anda tidak memahami matematika, bukan karena nama terlalu pendek. Mengubah ekspresi matematika yang tidak Anda pahami bukanlah proses keandalan tinggi. Setelah Anda memahami matematika, panjang nama variabel tidak relevan. Bantulah orang lain dan berikan kutipan (dalam komentar) ke beberapa deskripsi matematika yang relevan, jika Anda harus mempelajarinya!
Rex Kerr
3
Identifier yang diberi nama setelah Donkey Kong disetujui: dK = conic constant.
Thomas Eding
8
Sebaliknya, orang bisa bertanya apakah ketidaktahuan bidang domain dibenarkan mengabaikan konvensi. Pada akhirnya, itu tergantung pada konteksnya.
Daniel C. Sobral

Jawaban:

234

Tampaknya nama-nama variabel ini didasarkan pada singkatan yang Anda harapkan untuk ditemukan dalam buku teks fisika yang menangani berbagai masalah optik. Ini adalah salah satu situasi di mana nama variabel pendek sering lebih disukai daripada nama variabel yang lebih panjang. Jika Anda memiliki fisikawan (atau orang yang terbiasa mengerjakan persamaan dengan tangan) yang terbiasa menggunakan singkatan umum seperti Rin, Rout, dll. Kode akan jauh lebih jelas dengan singkatan tersebut daripada dengan nama variabel yang lebih panjang. Ini juga membuatnya lebih mudah untuk membandingkan formula dari makalah dan buku teks dengan kode untuk memastikan bahwa kode tersebut benar-benar melakukan perhitungan dengan benar.

Siapa pun yang terbiasa dengan optik akan segera mengenali sesuatu seperti Rin sebagai jari-jari dalam (dalam makalah fisika, yang inakan diterjemahkan sebagai subskrip), Rout sebagai jari-jari luar, dll. Meskipun mereka hampir pasti dapat secara mental menerjemahkan sesuatu seperti innerRadiusnomenklatur yang lebih akrab, melakukan hal itu akan membuat kode kurang jelas bagi orang itu. Itu akan membuatnya lebih sulit untuk menemukan kasus-kasus di mana formula yang sudah dikenal telah dikodekan secara salah dan itu akan membuatnya lebih sulit untuk menerjemahkan persamaan dalam kode ke dan dari persamaan yang akan mereka temukan di kertas atau buku teks.

Jika Anda adalah satu-satunya orang yang pernah melihat kode ini, Anda tidak perlu menerjemahkan antara kode dan persamaan optik standar, dan tidak mungkin bahwa fisikawan akan perlu melihat kode di masa depan mungkin itu tidak masuk akal untuk refactor karena manfaat dari singkatan tidak lagi melebihi biaya. Namun, jika ini adalah pengembangan baru, hampir pasti masuk akal untuk menggunakan singkatan yang sama dalam kode yang akan Anda temukan dalam literatur.

Justin Cave
sumber
17
Dan jika tidak ada fisikawan atau ahli matematika di staf? Kode itu pada dasarnya diserahkan kepada saya. Sebagian besar tidak berdokumen. Akankah lebih sulit untuk membaca nama deskriptif?
KChaloux
127
+1 Bukanlah tidak masuk akal untuk mengharapkan seorang programmer memahami domain yang sedang dikerjakannya. Di sisi lain, dalam karya matematika, variabel biasanya didefinisikan di tempat yang nyaman. Dalam kode seperti ini saya akan mengharapkan komentar menonjol yang menunjukkan bentuk panjang.
Karl Bielefeldt
15
+1: Apa yang Anda katakan pada dasarnya adalah bahwa seorang programmer yang memahami domain tempat mereka bekerja akan memahami nama-nama variabel. Ini akan sama di banyak proyek bahkan dengan nama variabel yang lebih panjang. misalnya. variabel yang disebutkan columndalam permainan strategi militer sangat mungkin berarti sesuatu yang berbeda dari yang ada dalam pembuatan grafik perangkat lunak.
Steven Evers
23
Dalam pemrograman medis, Anda akan sering menemukan istilah yang bertahan dalam lingkup pemrograman. Misalnya dengan oftalmologi Anda akan melihat OU, OD, dan OS. Ini menunjukkan mata mana, misalnya ouSphere dapat mereferensikan komponen 'bola' dari resep kacamata untuk mata kanan. Anda akan menjadi programmer yang lebih baik jika Anda memahami domain bisnis yang Anda pemrograman.
Bill
11
+1 untuk mencatat nama pendek yang cocok dengan yang ada di persamaan & rumus dari makalah dan teks. Ketika saya melakukan itu, saya memasukkan komentar di mana menemukan bahan referensi asli.
Jay Elston
89

Variabel dengan masa hidup pendek harus diberi nama segera. Sebagai contoh, Anda tidak menulis for(int arrayCounter = 0; arrayCounter < 10; arrayCounter++) { .... Sebaliknya, Anda gunakan for(int i ....

Secara umum dapat dikatakan bahwa semakin pendek ruang lingkup variabel semakin pendek nama seharusnya. Counter loop sering hanya berupa huruf tunggal, katakanlah i, jdan k. Variabel lokal adalah sesuatu seperti baseatau fromdan to. Variabel global kemudian agak rumit, misalnya EntityTablePointer.

Mungkin aturan seperti ini tidak diikuti dengan basis kode yang Anda gunakan. Itu alasan bagus untuk melakukan beberapa refactoring!

zxcdw
sumber
14
i, j dan k untuk indeks array mewakili tradisi kembali setidaknya ke Fortran. Setiap programmer yang menghargai diri sendiri akan terbiasa dengan konvensi ini.
Dominic Cronin
7
Saya biasanya tidak menulis i, j, k, saya menulis sesuatu seperti personPoskarena saya tidak akan melupakan apa yang saya iterasi dan apa indeks mewakili.
Malcolm
18
-1, saya memang menggunakan nama panjang untuk iterasi indeks array, tapi saya memberi mereka nama yang bermakna, bukan yang jelas dan tidak berarti arrayCounter . Membuat kode lebih mudah dibaca dan setidaknya menyelamatkan Anda dari menginjak-injak penghitung luar ketika Anda menyalin / menempelkan loop lain di dalam yang ini.
Oleg V. Volkov
3
counter adalah kata benda atau kata sifat. Count adalah kata benda atau kata kerja. Tentu saja, saya masih tidak akan menyebut sesuatu arrayCounter, saya akan menggunakan personIndexatau rowatau apa pun dijelaskan apa yang saya cari di.
Wayne Werner
6
Ketika saya melakukan satu loop, saya menggunakan i. Tapi begitu saya beralih ke loop bersarang, saya menjatuhkan inomenklaturnya. Alasan untuk ini adalah karena saya benar-benar ingin melacak variabel loop mana yang sedang dikerjakan, dan ivs jbisa sangat menipu dalam kode padat. Membuatnya lebih mudah dibaca, dan menambahkan lebih banyak ruang kosong, secara inheren perlu bagi saya.
jcolebrand
48

Masalah dengan kode bukanlah nama pendek, melainkan kurangnya komentar yang akan menjelaskan singkatan, atau menunjuk ke beberapa bahan bermanfaat tentang formula dari mana variabel diturunkan.

Kode itu hanya mengasumsikan masalah-keakraban domain.

Itu bagus, karena keakraban masalah-domain mungkin diperlukan untuk memahami dan mempertahankan kode, terutama dalam peran seseorang yang "memiliki" itu, sehingga Anda perlu memperoleh keakraban daripada berkeliling mencari-cari nama yang panjang.

Tapi alangkah baiknya jika kode memberikan beberapa petunjuk untuk berfungsi sebagai loncatan. Bahkan seorang pakar domain bisa melupakan bahwa dKkonstanta berbentuk kerucut. Menambahkan sedikit "lembar contekan" di blok komentar tidak ada salahnya.

Kaz
sumber
Akhirnya berakhir dengan sesuatu seperti ini.
KChaloux
5
Ini salah. Tidak ada alasan untuk membuat kode Anda sulit dibaca untuk memaksa orang menghabiskan lebih banyak waktu "mempelajarinya". Anda tidak mengajar, Anda hanya memperlambat orang. Juga, hampir tidak pernah ada satu pun pemilik kode selamanya. Anda terlihat picik dan egois.
xaxxon
7
Penafsiran Anda yang salah, bukan jawabannya. Kode mengimplementasikan beberapa matematika yang ada di luar kode itu dan terlepas dari itu, dan yang datang sebelum kode. Menjaga nama yang sama sangat membantu. Seseorang yang mempertahankan kode mungkin harus mempelajari itu di luar matematika, dan tidak harus memetakan antara dua skema penamaan akan membantu orang itu.
Kaz
19

Untuk variabel tertentu yang terkenal di domain masalah - seperti kasus yang Anda miliki di sini - nama variabel singkat adalah wajar. Jika saya mengerjakan game, saya ingin entitas game saya memiliki variabel posisi xdan y, bukan horizontalPositiondan verticalPosition. Demikian juga lingkaran counter yang tidak memiliki semantik luar pengindeksan, saya berharap untuk melihat i, j, k.

Russell Borogove
sumber
Saya berpendapat bahwa cv, din, dan dout tidak segera jelas (meskipun tampaknya mereka didirikan di bidang tertentu). Saya tidak akan berdebat tentang x dan y, mengingat koordinat Cartesian berlaku untuk sejumlah bidang, dan diajarkan kepada semua orang di sekolah menengah dan menengah.
KChaloux
1
Dan xdan y, sementara umum, tidak membawa aspek penting implisit seperti mana asal.
Ross Patterson
3
@RossPatterson: Namun, ada banyak konteks di mana itu tidak penting. Misalnya, pertimbangkan loop seperti for (x,y) in list_of_coordinates: print x,y: Asal tidak terlalu penting ketika mencoba memahami kode.
Bryan Oakley
16

Menurut "Kode Bersih":

Nama variabel harus:

  • Jadilah niat mengungkapkan
  • Hindari disinformasi
  • Buat perbedaan yang bermakna
  • Diucapkan
  • Dapat dicari

Pengecualian adalah pepatah yang i,j,k,m,ndigunakan untuk loop.

Variabel nama Anda, memang seharusnya, mengeluh tentang melakukan hal-hal di atas. Nama-nama itu adalah nama yang buruk.

Juga, karena setiap metode harus pendek , menggunakan awalan untuk menunjukkan lingkup atau jenis tidak lagi digunakan.

Nama-nama ini lebih baik:

radius
curvature
conicConstant
innerAperture
outerAperture
innerRadius
outerRadius

Seorang komentator mengatakan bahwa ini akan terlalu kompleks dengan nama variabel panjang:

masukkan deskripsi gambar di sini

Nama variabel pendek juga tidak membuatnya menjadi sederhana:

fnZR = (r^2/fnR(1+Math.sqrt((1+k) * (r^2/R^2)))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;

Jawabannya adalah nama panjang dan hasil antara hingga Anda mendapatkan ini di akhir:

thisNiceThing =  ( thisOKThing / thisGreatThing ) + thisAwsomeThing;
user61852
sumber
26
Variabel-variabel ini mungkin digunakan dalam rumus matematika dalam kode. Rumus matematika lebih mudah dibaca dengan nama variabel pendek. Saya menggunakan nama variabel panjang di sebagian besar kode saya, tetapi matematika lebih baik dengan nama variabel pendek. Contoh acak: pertimbangkan berapa lama ini dengan nama variabel panjang.
MarkJ
@ MarkJ Anda benar.
Tulains Córdova
1
Hasil antara memiliki manfaat tambahan untuk mengurangi dan mengisolasi kesalahan pemrograman. Otak kita hanya dapat memproses begitu banyak informasi dalam satu waktu, dan sulit untuk menemukan kesalahan dalam sesuatu sepertifnZR = (r^2/fnR(1+Math.sqrt((1+k)) * (r^2/R^2))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;
kelopak mata
1
Ini tidak sulit jika itu roti dan mentega Anda.
Radu
1
Intinya bukan untuk menulis satu-liner. Tapi masalahnya adalah bahwa jika Anda perlu mengubah sesuatu dan menggunakan rumus lain sekarang Anda memiliki masalah di mana dibutuhkan waktu yang lama untuk mencari tahu mana long_nameyang Rdalam buku teks mengacu pada. Gunakan hasil antara, tetapi pertahankan matematika Anda yang rumit sedekat mungkin dengan domain masalah sehingga Anda dapat benar-benar mempertahankannya jika Anda perlu menambahkan fitur.
slebetman
8

Ada dua alasan bagus untuk tidak mengganti nama variabel dalam kode lawas.

(1) kecuali jika Anda menggunakan alat refactoring otomatis, kemungkinan memperkenalkan bug tinggi. Karenanya, "jika tidak rusak, jangan perbaiki"

(2) Anda akan membuat membandingkan versi saat ini dengan versi masa lalu, untuk melihat apa yang berubah, tidak mungkin. Ini akan membuat pemeliharaan kode di masa mendatang lebih sulit.

ddyer
sumber
7
Benar sekali, tetapi risiko kurangnya pemahaman jauh lebih besar.
Ross Patterson
2
Anda memiliki masalah yang jauh lebih besar jika alat Anda tidak dapat menangani masalah sederhana seperti yang Anda sebutkan.
AndSoYouCode
Jawaban (1) Cakupan tes otomatis yang masuk akal dan enkapsulasi waras, (2) Kemahiran dengan kontrol versi.
Adamantish
5

Apakah ada alasan yang baik untuk menamai variabel dengan cara ini, atau apakah saya dibenarkan memperbarui mereka menjadi nama yang lebih deskriptif saat saya menjumpai variabel?

Alasan untuk menggunakan nama yang lebih kecil adalah jika programmer asli menemukannya lebih mudah untuk dikerjakan. Agaknya mereka memiliki hak untuk menemukan hal tersebut, dan hak untuk tidak memiliki preferensi pribadi yang sama dengan yang Anda miliki. Secara pribadi, saya akan menemukan ...

dDin better than dDinnerAperture
dDout better than dDouterAperture

... jika saya menggunakannya dalam perhitungan yang panjang dan rumit. Semakin kecil ekspresi matematika, seringkali semakin mudah untuk melihat semuanya sekaligus. Meskipun jika itu yang terjadi, mereka mungkin lebih baik sebagai dIn dan dOut, jadi tidak ada D berulang yang dapat menyebabkan kesalahan ketik yang mudah.

Di sisi lain, jika Anda merasa lebih sulit untuk diajak bekerja sama, maka benturkan diri Anda dan ubah nama menjadi bentuk yang lebih panjang. Terutama jika Anda bertanggung jawab untuk kode itu.

GrandmasterB
sumber
7
Paling tidak saya pasti menyingkirkan notasi Sistem Hungaria ...
KChaloux
4
Yang memimpin dadalah orang Hongaria? Saya pikir itu kalkulus seperti pada dx^2/dx = 2x.
Shannon Severance
7
Jika saya melihatnya dDinnerAperturesendiri, saya akan membacanya sebagai "Dinner Aperture", dan bertanya-tanya apakah itu hanya cara lucu untuk mengatakan "mulut Anda". Tidak pernah menjadi penggemar gaya "huruf besar diikuti dengan huruf kecil). Kadang-kadang sangat membingungkan.
Darrel Hoffman
2
+1 inilah jawabannya. Rumus matematika panjang lebih mudah dibaca dengan nama variabel pendek. Variabel-variabel ini mungkin digunakan dalam rumus matematika dalam kode. Rumus matematika lebih mudah dibaca dengan nama variabel pendek. Saya menggunakan nama variabel panjang di sebagian besar kode saya, tetapi matematika lebih baik dengan nama variabel pendek. Contoh acak: pertimbangkan berapa lama ini dengan nama variabel panjang.
MarkJ
1
@ShannonSeverance Saya setuju dengan Anda. Berasal dari latar belakang teknik, d pasti harus dicadangkan untuk kalkulus ketika menggunakan nama variabel dalam arti matematika (seperti yang sering disebutkan di sini).
CodeMonkey
4

Secara umum, saya percaya bahwa aturan untuk ini, seharusnya Anda dapat menggunakan nama variabel yang sangat singkat di mana Anda tahu bahwa orang-orang yang "ahli dalam bidang ini" dari kode khusus Anda akan segera memahami referensi nama variabel itu. (Anda selalu memiliki komentar untuk perkecualian kasus ini), dan bahwa penggunaan lokal variabel dapat dengan mudah dilihat berdasarkan konteks bagaimana mereka digunakan.

Untuk memperluas ini, itu berarti bahwa Anda tidak harus keluar dari cara Anda untuk mengaburkan nama variabel Anda, tetapi, Anda dapat menggunakan singkatan untuk nama variabel Anda, di mana Anda tahu bahwa hanya orang-orang yang memahami konsep yang mendasari kode Anda yang cenderung untuk membacanya.

Untuk menggunakan contoh dunia nyata, baru-baru ini, saya membuat kelas Javascript yang akan mengambil garis lintang, dan memberi tahu Anda jumlah sinar matahari yang Anda harapkan pada tanggal tertentu.

Untuk membuat kelas Sundial ini , saya mungkin merujuk pada setengah lusin sumber daya, Astronomi Almanac, dan cuplikan dari bahasa lain, (PHP, Java, C dll).

Dalam hampir semua ini, mereka menggunakan singkatan identik yang serupa, yang pada permukaannya tidak ada artinya sama sekali.

K, T, EPS, deltaPsi, eot, LM,RA

Namun, jika Anda memiliki pengetahuan fisika, Anda dapat memahami apa itu fisika. Saya tidak akan mengharapkan orang lain menyentuh kode ini, jadi mengapa menggunakan nama variabel verbose?

julianTime, nutationOfEclipticalLongitudeExpressedInDegrees, equationOfTime, longitudeMean, rightAscension.

Selain itu, sering kali, ketika nama variabel bersifat sementara, artinya, mereka hanya digunakan untuk sementara mengalokasikan beberapa nilai, maka sering kali tidak masuk akal untuk menggunakan versi verbose, terutama ketika konteks variabel menjelaskan tujuannya.

Laykes
sumber
1

Benar-benar ada; sering kali hanya nama variabel pendek yang diperlukan.

Dalam kasus saya, saya melakukan navigasi waypoint di kelas Robotika senior saya, dan kami memprogram robot kami di KISS-C. Kita memerlukan variabel untuk koordinat sekarang dan tujuan (x, y), jarak (x, y), judul saat ini dan tujuan, serta sudut belok.

Khususnya dalam kasus koordinat x dan y, nama variabel panjang sama sekali tidak perlu, dan nama seperti xC (x saat ini), yD (tujuan y), dan pD (tujuan phi), cukup dan paling mudah untuk dipahami pada kasus ini.

Anda mungkin berpendapat bahwa ini bukan 'nama variabel deskriptif' sebagai protokol programmer akan menentukan, tetapi karena nama didasarkan pada kode sederhana (d = tujuan, c = saat ini), komentar yang sangat sederhana pada awalnya adalah semua deskripsi mereka membutuhkan.

George Gorski
sumber
0

Apakah ada alasan yang baik untuk menamai variabel dengan cara ini, atau apakah saya dibenarkan memperbarui mereka menjadi nama yang lebih deskriptif saat saya menjumpai variabel?

Biasanya, algoritma yang kompleks diimplementasikan dalam matlab (atau bahasa serupa). Apa yang saya lihat adalah orang hanya mengambil alih nama variabel. Dengan begitu, mudah untuk membandingkan implementasi.

Semua jawaban lain hampir benar. Singkatan-singkatan ini dapat ditemukan dalam matematika dan fisika, kecuali mereka tidak dimulai dengan d(seperti pada contoh Anda). Variabel yang dimulai dengan d biasanya dinamai untuk mewakili diferensiasi .

Semua panduan pengkodean normal memberi tahu untuk tidak menyebutkan variabel dengan huruf pertama yang mewakili jenis (seperti dalam kasus Anda), karena sangat mudah untuk menelusuri kode di semua IDE modern.

BЈовић
sumber
Benar, elemen itu hilang terlepas dari apa yang orang katakan. Ada semacam setengah-Hungaria setengah-bukan skizofrenia yang terjadi di basis kode yang saya perbarui saat saya menemukannya.
KChaloux
0

Saya bisa memikirkan alasan mengapa nama variabel cukup pendek.

Nama-nama pendek mudah dibaca menggunakan rentang mata yang lebih pendek, karenanya rentang perhatian pendek.

Sebagai contoh, begitu saya terbiasa dengan fakta bahwa svdb berarti "simpan ke database", tingkat pemindaian kode sumber menjadi lebih baik karena saya hanya perlu dengan cepat memindai 4 karakter daripada saat membaca SaveToDatabase (14 karakter, semuanya menjadi lebih buruk untuk nama operasi yang lebih kompleks). Saya mengatakan "memindai" bukan "membaca", karena itu mengambil bagian utama dari analisis kode sumber.

Saat memindai melalui sejumlah besar kode sumber, ini dapat memberikan keuntungan kinerja yang baik.

Juga, itu hanya membantu programmer malas untuk mengetikkan nama-nama pendek ini ketika menulis kode.

Tentu saja, semua "singkatan" ini diharapkan akan terdaftar di beberapa lokasi standar dalam kode sumber.

Amol
sumber
1
Kami tidak membaca kata-kata sebagai sekumpulan karakter, kami membacanya sebagai bentuk dan menyelesaikan perincian secara kondisional ketika pemahaman sekilas gagal. Panjang kata yang perlu waktu lebih lama untuk membaca jauh lebih besar dari 4 karakter, dan kami dapat memproses secara mental camelCase dan cara lain untuk memecah kata-kata nama variabel sebagai batas kata. Saya ragu tes membaca akan menghasilkan klaim bahwa nama yang lebih pendek meningkatkan kecepatan pemahaman membaca; alih-alih, dengan menghapus kata-kata yang dapat dikenali, akan ada penurunan kecepatan hingga kata-kata baru itu berasimilasi (yang Anda tunjukkan sendiri).
kelopak mata
0

Untuk membingkai apa yang dikatakan @zxcdw dengan cara yang sedikit berbeda, dan menguraikannya dalam hal pendekatan:

Fungsinya harus murni , singkat dan enkapsulasi sempurna dari beberapa fungsionalitas: Logika kotak hitam , terlepas dari apakah ia telah duduk tak tersentuh selama 40 tahun, ia akan terus melakukan pekerjaan yang dirancang untuknya, karena antarmuka (masuk dan keluar) adalah suara, bahkan ketika Anda tidak tahu apa pun tentang internalnya.

Ini adalah jenis kode yang ingin Anda tulis: ini adalah kode yang bertahan, dan mudah untuk port.

Bila perlu, buat fungsi dari panggilan fungsi lainnya (sebaris) , untuk menjaga kode tetap terpelihara.

Sekarang, dengan nama fungsi deskriptif yang sesuai (jika perlu!), Kami meminimalkan kemungkinan salah tafsir atas nama-nama variabel pendek tersebut, karena cakupannya sangat kecil.

Arcane Engineer
sumber
-1

Nama variabel harus sejelas mungkin untuk membantu keterbacaan program. Anda mengalaminya sendiri: Anda mengalami banyak kesulitan mengidentifikasi apa yang dilakukan program karena penamaan yang buruk.

Tidak ada alasan bagus untuk tidak menggunakan nama deskriptif. Ini akan membantu Anda, dan semua orang yang bekerja / akan bekerja di proyek. Yah sebenarnya ada satu penggunaan sah untuk nama pendek: loop counter.

marco-fiset
sumber
6
Perhatikan bahwa int dummy_variable_for_for_loops;sejelas mungkin.
Kaz
4
-1 karena jawaban ini membingungkan. Pertama dikatakan tidak ada alasan yang baik, kemudian diakhiri dengan mengatakan bahwa sebenarnya ada. Jawabannya akan lebih baik jika diucapkan ulang untuk tidak bertentangan dengan dirinya sendiri.
Bryan Oakley
Saya akan mengubahnya untuk membaca "sejelas mungkin ". Jika nama pendek menyampaikan tujuan variabel, maka boleh saja menggunakan nama pendek .
Maximus Minimus
-1

Tentunya ini untuk apa // komentar?

Jika tugas memiliki komentar yang deskriptif Anda mendapatkan yang terbaik dari kedua dunia: deskripsi variabel dan persamaan apa pun mudah dibandingkan dengan rekan buku teks mereka.

Richie
sumber
-1

Untuk antarmuka (misalnya, tanda tangan metode, tanda tangan fungsi) Saya cenderung untuk menyelesaikan ini dengan membubuhi keterangan parameter deklarasi. Untuk C / C ++ ini menghiasi file .h serta kode implementasi.

Saya melakukan hal yang sama untuk deklarasi variabel di mana mengetahui penggunaan variabel tidak jelas dalam konteks dan penamaan. (Ini berlaku dalam bahasa yang tidak memiliki pengetikan kuat juga.)

Ada banyak hal yang kita tidak ingin menyumbat nama variabel. Apakah sudut dalam radian atau derajat, apakah ada toleransi pada presisi atau jangkauan, dll. Informasi dapat memberikan pernyataan berharga tentang karakteristik yang harus ditangani dengan benar.

Saya tidak religius tentang hal itu. Saya hanya tertarik pada kejelasan dan memastikan bahwa saya sekarang adalah apa kali berikutnya diri saya yang pelupa mengunjungi kode. Dan siapa pun yang melihat dari balik pundak saya memiliki apa yang perlu mereka ketahui untuk melihat di mana sesuatu mati, apa yang penting (kritis terakhir untuk perawatan yang tepat).

orcmid
sumber
-1

Apakah ada alasan untuk nama variabel yang terlalu pendek?

Pertama: Memberi nama variabel untuk energi e sambil menghitung formula seperti E = MC2 TIDAK penamaan yang terlalu pendek. Menggunakan simbol sebagai argumen untuk nama pendek tidak valid

Pertanyaan ini agak menarik bagi saya, dan saya hanya bisa memikirkan satu alasan dan itu adalah uang.

Misalnya, Anda menggunakan javascript untuk klien yang mengetahui bahwa file tersebut akan diunduh berkali- kali per detik. Akan lebih murah dan membuat pengalaman pengguna lebih baik jika file (dalam jumlah byte) sekecil mungkin.

(Hanya untuk menjaga contoh 'realistis', Anda tidak diizinkan menggunakan alat minifier, mengapa? Masalah keamanan, tidak ada alat eksternal yang diizinkan menyentuh basis kode.)

AlexanderBrevig
sumber
1
Contoh Anda masih sangat tidak realistis.
Radu
-1

Saya perhatikan bahwa jawaban lain tidak menyebutkan penggunaan Notasi Hongaria. Ini ortogonal untuk perdebatan panjang, tetapi relevan dengan skema penamaan pada umumnya.

double dR, dCV, dK, dDin, dDout, dRin, dRout

"D" di awal semua variabel ini dimaksudkan untuk menunjukkan bahwa mereka berlipat ganda; tapi bahasa tetap menerapkan ini. Terlepas dari kesempitan nama-nama ini, mereka hingga 50% berlebihan !

Jika kita akan menggunakan konvensi penamaan untuk mengurangi kesalahan, lebih baik kita menyandikan informasi yang tidak dicek oleh bahasa. Misalnya, tidak ada bahasa yang akan dikeluhkan dK + dRdalam kode di atas, meskipun tidak berarti menambahkan angka tanpa dimensi ke panjang.

Cara yang baik untuk mencegah kesalahan tersebut adalah dengan menggunakan tipe yang lebih kuat; namun, jika kita akan menggunakan ganda maka skema penamaan yang lebih tepat mungkin:

// Dimensions:
// l  = length
// rl = reciprocal length
double lR, rlCV, K, lDin, lDout, lRin, lRout

Bahasa masih akan memungkinkan kita untuk menulis K + lR, tetapi sekarang nama memberi kita petunjuk bahwa ini mungkin salah.

Ini adalah perbedaan antara Sistem Hungaria (umumnya buruk) dan Aplikasi Hungaria (mungkin bagus)

http://en.wikipedia.org/wiki/Hungarian_notation

Warbo
sumber
1
Sebenarnya, C ++ dapat mengeluh K + lR jika Anda mendeklarasikan unit Anda dengan benar. Dengan unit SI dapat melakukan pemeriksaan dimensi dan konversi unit. Menambahkan 3_feet + 2_meterseharusnya tidak ada masalah, sementara 2_meter+1_secondseharusnya merupakan kesalahan waktu kompilasi.
MSalters
@MSalters Itu sangat keren; pendekatan templat / makro tidak terpikir oleh saya. Namun, dalam pertanyaan "agnostik bahasa" seperti ini, saya akan mengelompokkan semua unit waktu kompilasi yang diperiksa di bawah payung "tipe yang lebih kuat", terlepas dari apakah bahasa memanggilnya "tipe" atau tidak;)
Warbo
Template, tentu saja. Anda tidak dapat melakukan jenis kalkulus yang diperlukan di makro.
MSalters
-2

Satu- satunya kasus di mana nama variabel pendek yang tidak sah dapat diterima dalam rekayasa perangkat lunak modern adalah ketika mereka ada dalam sebuah skrip dan throughput skrip tersebut (melalui jaringan umumnya) adalah penting. Bahkan kemudian, simpan skrip dengan nama panjang di kontrol sumber, dan perkecil skrip dalam produksi.

Telastyn
sumber
9
Bagaimana dengan saat melakukan operasi matematika di mana istilah tersebut dianggap sebagai pengetahuan umum di domain? Contoh: menggunakan M bukannya "massa" di e = mc ^ 2
Andy Hunt
2
@andyBursh - Saya akan berhati-hati di sana. Programmer tidak sering ahli (atau bahkan kompeten) dalam domain masalah mereka. Yang mengatakan, hal semacam ini bisa baik-baik saja, terutama jika ada tautan komentar yang sesuai dengan rumus yang dimaksud; Saya sudah lupa tentang skenario ini.
Telastyn
8
@Telastyn - Jika Anda berasumsi bahwa programmer bukan ahli, yang sering mengarah pada mengambil singkatan yang memiliki arti yang sangat jelas dan mengubahnya menjadi nama yang lebih panjang yang setidaknya agak ambigu (yaitu seseorang memutuskan untuk memberi nama variabel lokal radiusketika itu menyimpan jari-jari dalam tidak memahami yang jauh lebih ambigu daripada Rin). Dan kemudian pengembang non-ahli harus menerjemahkan antara nomenklatur uniknya dan nomenklatur yang dipahami bisnis setiap kali ada diskusi yang melibatkan persamaan.
Justin Cave
2
Bagaimana dengan "i" untuk penghitung lingkaran? Atau "x" dan "y" saat berhadapan dengan koordinat? Atau variabel yang ruang lingkupnya hanya dua baris kode?
Bryan Oakley
4
Tidak setuju dengan jawaban ini. Seorang programmer yang mengerjakan program yang berisi ekspresi matematika yang kompleks sebaiknya bisa setidaknya membaca rumus dalam spesifikasi, jika tidak mereka tidak kompeten. Itu bukan masalah pengetahuan domain, itu keterampilan yang penting - beberapa kompetensi matematika dasar sebelum mengerjakan program matematika. Jika programmer tidak memiliki akses ke formula spesifikasi, itu masalah lain - dan itu tidak dapat diselesaikan dengan komentar saja.
MarkJ