Satu bahaya dengan params
Kata Kunci adalah, jika setelah Panggilan ke Kode telah dikodekan,
- seseorang secara tidak sengaja / sengaja menghapus satu / lebih Parameter yang diperlukan dari Metode Tanda Tangan, dan
- satu / lebih Parameter yang diperlukan segera sebelum
params
Parameter sebelum perubahan Signature adalah Type-Kompatibel dengan params
Parameter,
Panggilan tersebut akan terus dikompilasi dengan satu / lebih Ekspresi yang sebelumnya dimaksudkan untuk Parameter yang diperlukan diperlakukan sebagai params
Parameter opsional . Saya baru saja menemukan kasus terburuk yang mungkin terjadi: params
Parameternya Type object[]
.
Ini patut diperhatikan karena pengembang terbiasa dengan kompilator yang menampar pergelangan tangan mereka dengan skenario yang jauh lebih umum di mana Parameter dihapus dari Metode dengan semua Parameter yang diperlukan (karena # Parameter yang diharapkan akan berubah).
Bagi saya, itu tidak sepadan dengan jalan pintas. (Type)[]
tanpa params
akan bekerja dengan 0 hingga tak terhingga # dari Parameter tanpa perlu Override. Kasus terburuk adalah Anda harus menambahkan , new (Type) [] {}
ke Panggilan di mana itu tidak berlaku.
Btw, imho, praktik paling aman (dan paling mudah dibaca) adalah:
lewat Parameter Bernama (yang sekarang dapat kita lakukan bahkan dalam C # ~ 2 dekade setelah kita dapat dalam VB; P) (karena:
1.1. itu satu - satunya cara yang menjamin pencegahan nilai yang tidak disengaja diteruskan ke Parameter setelah urutan Parameter, Jenis Kompatibel dan / atau perubahan jumlah setelah Panggilan dikodekan,
1.2. itu mengurangi peluang tersebut setelah perubahan makna Parameter, karena kemungkinan nama pengidentifikasi baru yang mencerminkan makna baru tepat di sebelah nilai yang diteruskan ke sana,
1.3. itu menghindari keharusan untuk menghitung koma dan melompat-balik dari Call to Signature untuk melihat Ekspresi apa yang diberikan untuk Parameter apa, dan
1.3.1. By the way, alasan ini saja harus banyak (dalam hal menghindari pelanggaran sering rawan dari Prinsip KERING hanya untuk membaca kode belum lagi juga memodifikasinya ), tetapi alasan ini bisa secara eksponensial lebih penting jika ada satu / lebih banyak Ekspresi yang Lulus yang mengandung koma, yaitu Array Multi-Dimensi atau Panggilan Fungsi Multi-Parameter. Dalam hal ini, Anda bahkan tidak bisa menggunakan (yang bahkan jika Anda bisa, masih akan menambahkan langkah ekstra per Parameter per Panggilan Metode) a Temukan Semua Kejadian dalam fitur Pilihan di editor Anda untuk mengotomatiskan penghitungan koma untuk Anda.
1.4. jika Anda harus menggunakan Parameter Opsional ( params
atau tidak), ini memungkinkan Anda untuk mencari Panggilan di mana Parameter Opsional tertentu dilewati (dan oleh karena itu, kemungkinan besar tidak atau setidaknya memiliki kemungkinan bukan Nilai Default),
(CATATAN: Alasan 1.2. Dan 1.3. Dapat memudahkan dan mengurangi kemungkinan kesalahan bahkan pada pengkodean Panggilan awal belum lagi ketika Panggilan harus dibaca dan / atau diubah.))
dan
lakukan SATU - PARAMETER - PER - LINE untuk keterbacaan yang lebih baik (karena:
2.1. itu kurang berantakan, dan
2.2. ia menghindari keharusan menggulir ke kanan & belakang kiri (dan harus melakukannya PER - LINE, karena kebanyakan manusia tidak dapat membaca bagian kiri dari banyak baris, gulir ke kanan dan baca bagian kanan)).
2.3. ini konsisten dengan "Praktik Terbaik" yang telah kami kembangkan untuk Pernyataan Tugas, karena setiap Parameter yang Lulus pada dasarnya adalah Pernyataan Tugas (memberikan Nilai atau Referensi ke Variabel Lokal). Sama seperti mereka yang mengikuti "Praktik Terbaik" terbaru dalam Gaya Pengkodean tidak akan bermimpi mengkode beberapa Pernyataan Tugas per baris, kita mungkin tidak seharusnya (dan tidak akan pernah "Praktik Terbaik" mengejar "jenius" saya; ) melakukannya saat Melewati Parameter.
CATATAN :
Melewati Variabel yang namanya mencerminkan Parameter 'tidak membantu ketika:
1.1. Anda melewati Konstanta Literal (yaitu 0/1 sederhana, salah / benar atau nol yang bahkan "'Praktik Terbaik'" mungkin tidak mengharuskan Anda menggunakan Konstan Bernama untuk dan tujuannya tidak dapat dengan mudah disimpulkan dari nama Metode ),
1.2. Metode ini secara signifikan lebih rendah-tingkat / lebih umum daripada Penelepon sehingga Anda tidak ingin / dapat memberi nama Variabel Anda sama / mirip dengan Parameter (atau sebaliknya), atau
1.3. Anda sedang memesan ulang / mengganti Parameter di Signature yang dapat mengakibatkan Panggilan sebelum masih Kompilasi karena Jenis terjadi masih kompatibel.
Memiliki fitur auto-wrap seperti VS tidak hanya menghilangkan SATU (# 2.2) dari 8 alasan yang saya berikan di atas. Sebelum VS 2015, itu TIDAK otomatis inden (!?! Sungguh, MS?!?) Yang meningkatkan keparahan alasan # 2.1.
VS harus memiliki opsi yang menghasilkan snippet Pemanggilan Metode dengan Parameter Bernama (satu per baris tentu saja; P) dan opsi kompiler yang memerlukan Parameter Bernama (serupa dalam konsep dengan Option Explicit di VB yang, btw, persyaratannya sangat banyak sekali dipikirkan sama-sama keterlaluan tapi sekarang banyak dibutuhkan oleh "'Praktik Terbaik'"). Bahkan, "kembali ke sayahari ";), pada tahun 1991 hanya beberapa bulan dalam karier saya, bahkan sebelum saya menggunakan (atau bahkan telah melihat) bahasa dengan Parameter Bernama, saya memiliki anti-domba /" hanya karena Anda bisa, jangan berarti Anda harus " Saya tidak secara membuta "memotong ujung daging panggang" cukup masuk akal untuk mensimulasikannya (menggunakan komentar sebaris) tanpa melihat ada orang yang melakukannya. Tidak harus menggunakan Parameter Bernama (juga sintaks lainnya yang menyimpan "'berharga'" kode sumber penekanan tombol) adalah peninggalan era Kartu Punch ketika sebagian besar sintaks ini dimulai.Tidak ada alasan untuk itu dengan perangkat keras modern dan IDE dan perangkat lunak yang jauh lebih kompleks di mana keterbacaannya jauh, Banyak, JAUHlebih penting. "Kode dibaca lebih sering daripada yang tertulis". Selama Anda tidak menduplikasi kode yang tidak diperbarui secara otomatis, setiap keystroke yang disimpan kemungkinan akan lebih mahal secara eksponensial ketika seseorang (bahkan diri Anda) mencoba membacanya nanti.