Dalam minggu-minggu terakhir saya telah melihat beberapa orang menggunakan nama yang sangat panjang untuk Metode atau Kelas (50 karakter), ini biasanya di bawah premis bahwa itu meningkatkan keterbacaan, pendapat saya adalah bahwa nama panjang seperti ini adalah indikator bahwa kita mencoba melakukan banyak atau terlalu banyak dalam kelas metode jika kita membutuhkan nama yang panjang, namun saya ingin tahu apa yang kalian pikirkan tentang itu.
Contohnya adalah:
getNumberOfSkinCareEligibleItemsWithinTransaction
f()
adalah fungsi yang sangat singkat, tetapi tentu saja ini bukan praktik yang baik ... dan sesuatu yang harus Anda sampaikan kepada beberapa matematikawan pemrograman di luar sana :)f()
mungkin bukan fungsi yang hebat, tapi$()
orang itu seperti rockstar di dunia metode Javascript.Jawaban:
Nama dalam Java, atau bahasa lain, terlalu panjang ketika ada nama pendek yang sama-sama menyampaikan perilaku metode.
sumber
boolean doesShorterNameExistThatEquallyConvaysTheBehaviorOfTheMethod(String s)
harus di refactored keboolean isTooLong(String s)
.eligible_items_cnt
tetapi di Jawa biasanya Anda katakangetEligibleItemsCount
.getLength()
vslength()
? Saya benar-benar suka melihat pelengkapan otomatis setelah mengetikkan 'get' atau 'set' - jadi saya lebih suka convetion daripada conciseness dalam kasus ini.Beberapa teknik untuk mengurangi panjang nama metode:
Jika seluruh program Anda, atau kelas, atau modul adalah tentang 'item perawatan kulit' Anda dapat membatalkan perawatan kulit. Sebagai contoh, jika kelas Anda dipanggil
SkinCareUtils
, itu membawa Anda kegetNumberOfEligibleItemsWithinTransaction
Anda dapat mengubah dalam ke dalam ,
getNumberOfEligibleItemsInTransaction
Anda dapat mengubah Transaksi ke Tx, yang membuat Anda melakukannya
getNumberOfEligibleItemsInTx
.Atau jika metode menerima param tipe
Transaction
Anda dapat menjatuhkan InTx sama sekali:getNumberOfEligibleItems
Anda mengubah angkaDari hitungan:
getEligibleItemsCount
Nah, itu sangat masuk akal. Dan itu 60% lebih pendek.
sumber
getEligibleItems()
dan digetEligibleItemsCount()
samping satu sama lain dalam daftar yang diurutkan berdasarkan abjad (mis. pelengkapan otomatis atau javadoc)Tx
,Cnt
,grph
, dan seterusnya ... (btw,Tx
adalah singkatan dari "Transmission" atau "Transmitter")Hanya untuk perubahan, jawaban non-subyektif: 65536 karakter.
;-)
sumber
Saya setuju dengan semua orang: nama metode tidak boleh terlalu panjang. Saya ingin menambahkan satu pengecualian:
Namun, nama metode uji JUnit bisa panjang dan harus menyerupai kalimat.
Mengapa?
Contoh:
Lihat " Desain Berbasis Perilaku " untuk info lebih lanjut tentang ide ini.
sumber
test
lagi, ini juga membuka kemungkinan untuk menggunakanshould
: sepertidialogShouldCloseWhenTheRedButtonIsPressedTwice()
. Atau Anda dapat menghubungi kelas ujiDialogShould
dan kemudian metodecloseWhenTheRedButtonIsPressedTwice()
, sehingga untuk membacanya bersama-sama:DialogShould.closeWhenTheRedButtonIsPressedTwice()
.Konteks "... Dalam Transaksi" harus jelas. Itulah tujuan dari orientasi objek.
Metode ini adalah bagian dari kelas. Jika kelas tidak berarti "Transaksi" - dan jika itu tidak menyelamatkan Anda dari keharusan mengatakan "Dalam Transaksi" sepanjang waktu, maka Anda punya masalah.
sumber
Saya cenderung menggunakan aturan haiku untuk nama:
Ini adalah aturan praktis untuk nama maksimal. Saya melanggar ini hanya ketika itu meningkatkan keterbacaan. Sesuatu seperti recalculateMortgageInterest (currentRate, quoteSet ...) lebih baik daripada recalculateMortgageInterestRate atau recalculateMortgageInterestRateFromSet karena fakta bahwa itu melibatkan harga dan seperangkat kutipan harus cukup jelas dari dokumen yang disematkan seperti javadoc atau yang setara dengan .NET.
CATATAN: Bukan haiku asli, karena ini adalah 7-5-7 daripada 5-7-5. Tapi saya masih lebih suka menyebutnya haiku.
sumber
Java memiliki budaya mendorong nama-nama panjang, mungkin karena IDE dilengkapi dengan pelengkapan otomatis yang baik.
Situs ini mengatakan bahwa nama kelas terpanjang di JRE
InternalFrameInternalFrameTitlePaneInternalFrameTitlePaneMaximizeButtonWindowNotFocusedState
adalah 92 karakter.Adapun nama metode terpanjang saya telah menemukan ini
supportsDataDefinitionAndDataManipulationTransactions
, yaitu 52 karakter.sumber
Jangan pernah menggunakan kata yang panjang ketika yang kecil akan dilakukan.
Saya tidak berpikir tesis Anda tentang "panjang nama metode sebanding dengan panjang metode" benar-benar menahan air.
Ambil contoh yang Anda berikan: "getNumberOfSkinCareEligibleItemsWithinTransaction". Bagi saya itu terdengar seperti hanya melakukan satu hal: menghitung jumlah item dalam transaksi yang termasuk dalam kategori tertentu. Tentu saja saya tidak bisa menilai tanpa melihat kode sebenarnya untuk metode ini, tetapi itu kedengarannya seperti metode yang baik bagi saya.
Di sisi lain, saya telah melihat banyak metode dengan nama yang sangat pendek dan ringkas yang dapat melakukan banyak pekerjaan, seperti "processSale" atau "doStuff" yang populer.
Saya pikir itu akan sulit untuk memberikan aturan yang keras dan cepat tentang panjang nama metode, tetapi tujuannya harus: cukup lama untuk menyampaikan apa fungsi tidak, cukup pendek untuk dibaca. Dalam contoh ini, saya pikir "getSkinCareCount" mungkin sudah cukup. Pertanyaannya adalah apa yang perlu Anda bedakan. Jika Anda memiliki satu fungsi yang menghitung item yang memenuhi syarat perawatan kulit dalam transaksi dan lainnya yang menghitung item yang memenuhi syarat perawatan kulit dalam hal lain, maka "dalam Transaksi" menambah nilai. Tetapi jika itu tidak berarti apa-apa untuk berbicara tentang barang-barang seperti itu di luar transaksi, maka tidak ada gunanya mengacaukan nama dengan informasi yang berlebihan.
Dua, saya pikir itu sangat tidak realistis untuk menganggap bahwa nama dengan panjang yang dapat diatur akan memberi tahu Anda dengan tepat apa fungsi dari semua kecuali kasus yang paling sepele. Tujuan realistis adalah membuat nama yang memberi petunjuk kepada pembaca, dan itu bisa diingat kemudian. Seperti, jika saya mencoba menemukan kode yang menghitung berapa banyak antimateri yang perlu kita konsumsi untuk mencapai kecepatan warp, jika saya melihat nama fungsi dan melihat "calibrateTransporter", "firePhasers", dan "calcAntimatterBurn", cukup jelas bahwa dua yang pertama bukan tapi yang ketiga mungkin. Jika saya memeriksa dan menemukan bahwa itu memang yang saya cari, akan mudah diingat bahwa ketika saya kembali besok untuk menyelesaikan masalah ini lagi. Cukup bagus.
Tiga, nama panjang yang mirip lebih membingungkan daripada nama pendek. Jika saya memiliki dua fungsi yang disebut "calcSalesmanPay" dan "calcGeekPay", saya dapat membuat tebakan yang bagus yang sekilas pandang. Tetapi jika mereka disebut "menghitungMonthlyCheckAmountForSalesmanForExportToAccountingSystemAndReconciliation" dan "menghitungMonthlyCheckAmountForProgrammersForExportToAccountingSystemAndRconcination", saya harus mempelajari nama untuk melihat mana yang mana. Informasi tambahan dalam nama mungkin kontraproduktif dalam kasus tersebut. Ternyata pemikiran setengah detik menjadi pemikiran 30 detik.
sumber
Rancang antarmuka Anda seperti yang Anda inginkan, dan sesuaikan implementasi.
Sebagai contoh, mungkin saya akan menuliskannya sebagai
atau dengan stream Java 8:
sumber
Aturan saya adalah sebagai berikut: jika sebuah nama sangat panjang sehingga harus muncul pada baris sendiri, maka itu terlalu panjang. (Dalam praktiknya, ini berarti saya jarang di atas 20 karakter.)
Ini didasarkan pada penelitian yang menunjukkan bahwa jumlah garis kode vertikal yang terlihat berkorelasi positif dengan kecepatan / efektivitas pengkodean. Jika nama kelas / metode mulai menyakitinya secara signifikan, nama itu terlalu panjang.
Tambahkan komentar di mana metode / kelas dideklarasikan dan biarkan IDE membawa Anda ke sana jika Anda ingin deskripsi panjang untuk apa itu.
sumber
Panjang metode itu sendiri mungkin merupakan indikator yang lebih baik untuk melakukan terlalu banyak, dan bahkan itu hanya memberi Anda ide kasar. Anda harus berusaha untuk keringkasan, tetapi deskripsi lebih penting. Jika Anda tidak dapat menyampaikan arti yang sama dalam nama yang lebih pendek, maka nama itu sendiri mungkin baik-baik saja.
sumber
Ketika Anda akan menulis nama metode lain kali, pikirkan saja kutipan di bawah ini
sumber
Nama metode itu pasti terlalu panjang. Pikiranku cenderung mengembara ketika aku membaca nama metode sebesar itu. Ini seperti membaca kalimat tanpa spasi.
Secara pribadi, saya lebih suka kata-kata sesedikit mungkin dalam metode. Anda terbantu jika paket dan nama kelas dapat menyampaikan makna. Jika tanggung jawab kelas sangat singkat , tidak perlu nama metode raksasa. Saya ingin tahu mengapa "Transaksi Dalam" di sana.
"getNumberOfSkinCareEligibleItemsWithinTransaction" dapat menjadi:
com.mycompany.app.product.SkinCareQuery.getNumEligibleItems ();
Kemudian ketika digunakan, metode ini dapat terlihat seperti "query.getNumEligibleItems ()"
sumber
Nama variabel terlalu panjang ketika nama yang lebih pendek akan memungkinkan pembacaan kode yang lebih baik atas seluruh program, atau bagian penting dari program.
Jika nama yang lebih panjang memungkinkan Anda untuk menyampaikan lebih banyak informasi tentang suatu nilai. Namun, jika sebuah nama terlalu panjang, itu akan mengacaukan kode dan mengurangi kemampuan untuk memahami sisa kode. Ini biasanya terjadi dengan menyebabkan garis membungkus dan mendorong baris kode lain dari halaman.
Caranya adalah menentukan mana yang akan menawarkan keterbacaan yang lebih baik. Jika variabel digunakan sering atau beberapa kali dalam ruang yang singkat, mungkin lebih baik untuk memberikannya nama pendek dan menggunakan komentar yang mengklarifikasi. Pembaca dapat merujuk kembali ke komentar dengan mudah. Jika variabel sering digunakan di seluruh program, sering sebagai parameter atau dalam operasi rumit lainnya, mungkin yang terbaik adalah memotong nama, atau menggunakan akronim sebagai pengingat kepada pembaca. Mereka selalu bisa merujuk komentar dengan deklarasi variabel jika mereka lupa artinya.
Ini bukan trade off yang mudah untuk dibuat, karena Anda harus mempertimbangkan apa yang pembaca kode mungkin coba pahami, dan juga memperhitungkan bagaimana kode akan berubah dan tumbuh dari waktu ke waktu. Itu sebabnya penamaan itu sulit.
Keterbacaan adalah alasan mengapa dapat diterima untuk menggunakan saya sebagai penghitung lingkaran alih-alih Des deskriptifLoopCounterName. Karena ini adalah penggunaan yang paling umum untuk suatu variabel, Anda dapat menghabiskan paling sedikit ruang layar untuk menjelaskan mengapa variabel itu ada. Nama yang lebih panjang hanya akan membuang-buang waktu dengan membuatnya lebih sulit untuk memahami bagaimana Anda menguji kondisi loop atau pengindeksan ke dalam array.
Di ujung lain spektrum, jika suatu fungsi atau variabel jarang digunakan dalam operasi yang kompleks, seperti diteruskan ke panggilan fungsi multi-parameter, Anda dapat memberikannya nama yang terlalu deskriptif.
sumber
Seperti halnya bahasa lain: ketika tidak lagi menjelaskan aksi tunggal fungsi melakukan.
sumber
Saya katakan menggunakan kombinasi jawaban yang bagus dan masuk akal.
Jelaskan secara lengkap dan jelas apa yang dilakukan metode ini.
Jika nama metode tampak terlalu panjang - refactor metode untuk melakukan lebih sedikit.
sumber
Itu terlalu panjang ketika nama metode membungkus ke baris lain dan panggilan ke metode adalah satu-satunya hal di telepon dan mulai cukup dekat dengan margin. Anda harus memperhitungkan ukuran rata-rata layar orang yang akan menggunakannya.
Tapi! Jika namanya tampak terlalu panjang maka mungkin terlalu panjang. Cara menyiasatinya adalah dengan menulis kode Anda sedemikian rupa sehingga Anda berada dalam suatu konteks dan namanya pendek tetapi digandakan dalam konteks lain. Ini seperti ketika Anda bisa mengatakan "dia" atau "dia" dalam bahasa Inggris alih-alih nama lengkap seseorang.
sumber
Itu terlalu lama ketika terlalu verbal menjelaskan tentang apa masalahnya.
Misalnya, nama-nama ini secara fungsional setara.
di Jawa:
java.sql.SQLIntegrityConstraintViolationException
dalam Python / Django:
django.db.IntegrityError
Tanyakan pada diri Anda, dalam paket SQL / db, berapa banyak lagi tipe kesalahan integritas yang dapat Anda temukan? ;) Karenanya
db.IntegrityError
sudah cukup.sumber
Nama pengenal terlalu panjang ketika melebihi panjang yang dapat ditangani oleh kompiler Java Anda.
sumber
Ada dua cara atau sudut pandang di sini: Salah satunya adalah bahwa itu benar-benar tidak peduli berapa lama nama metode itu, asalkan itu deskriptif mungkin untuk menggambarkan apa metode ini lakukan (aturan dasar praktik terbaik Java). Di sisi lain, saya setuju dengan posting flybywire. Kita harus menggunakan kecerdasan kita untuk mencoba mengurangi sebanyak mungkin nama metode, tetapi tanpa mengurangi deskriptivitasnya. Penjelasan lebih penting :)
sumber
Nama terlalu panjang jika:
Jujur nama hanya perlu menyampaikan tujuannya kepada para Pengembang yang akan menggunakannya sebagai metode API publik atau harus mempertahankan kode ketika Anda pergi. Ingat saja CIUMAN (tetap bodoh sederhana)
sumber