Tidak, tidak ada pedoman standar
Tetapi ada beberapa teknik yang bisa membuat fungsi dengan banyak parameter lebih tertahankan.
Anda bisa menggunakan parameter list-if-args (args *) atau parameter dictionary-of-args (kwargs **
)
Misalnya, dengan python:
// Example definition
def example_function(normalParam, args*, kwargs**):
for i in args:
print 'args' + i + ': ' + args[i]
for key in kwargs:
print 'keyword: %s: %s' % (key, kwargs[key])
somevar = kwargs.get('somevar','found')
missingvar = kwargs.get('somevar','missing')
print somevar
print missingvar
// Example usage
example_function('normal parameter', 'args1', args2,
somevar='value', missingvar='novalue')
Output:
args1
args2
somevar:value
someothervar:novalue
value
missing
Atau Anda bisa menggunakan sintaks definisi objek objek
Misalnya, inilah panggilan JavaScript jQuery untuk meluncurkan permintaan GET AJAX:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Jika Anda melihat kelas ajax jQuery ada banyak (sekitar 30) lebih banyak properti yang dapat diatur; sebagian besar karena komunikasi ajax sangat kompleks. Untungnya, sintaksis objek literal membuat hidup mudah.
C # intellisense menyediakan dokumentasi parameter yang aktif sehingga tidak jarang melihat pengaturan metode overload yang sangat kompleks.
Bahasa yang diketik secara dinamis seperti python / javascript tidak memiliki kemampuan seperti itu, jadi jauh lebih umum untuk melihat argumen kata kunci dan definisi literal objek.
Saya lebih suka definisi objek literal ( bahkan dalam C # ) untuk mengelola metode yang kompleks karena Anda dapat secara eksplisit melihat properti yang sedang diatur ketika objek dibuat. Anda harus melakukan sedikit lebih banyak pekerjaan untuk menangani argumen default tetapi dalam jangka panjang kode Anda akan jauh lebih mudah dibaca. Dengan definisi literal objek, Anda dapat memecah ketergantungan Anda pada dokumentasi untuk memahami apa yang dilakukan kode Anda pada pandangan pertama.
IMHO, metode kelebihan beban sangat berlebihan.
Catatan: Jika saya ingat kontrol akses hanya baca yang benar harus bekerja untuk konstruktor literal objek dalam C #. Mereka pada dasarnya bekerja sama dengan menyetel properti di konstruktor.
Jika Anda belum pernah menulis kode non-sepele dalam bahasa yang diketik secara dinamis (python) dan / atau fungsional / prototipe javaScript, saya sangat menyarankan untuk mencobanya. Ini bisa menjadi pengalaman yang mencerahkan.
Pertama-tama bisa menakutkan untuk mematahkan ketergantungan Anda pada parameter untuk akhir semua, semua pendekatan untuk fungsi / metode inisialisasi tetapi Anda akan belajar untuk melakukan lebih banyak lagi dengan kode Anda tanpa harus menambahkan kompleksitas yang tidak perlu.
Memperbarui:
Saya mungkin harus memberikan contoh untuk menunjukkan penggunaan dalam bahasa yang diketik secara statis, tetapi saat ini saya tidak berpikir dalam konteks yang diketik secara statis. Pada dasarnya, saya telah melakukan terlalu banyak pekerjaan dalam konteks yang diketik secara dinamis untuk tiba-tiba kembali.
Apa yang saya lakukan tahu adalah objek sintaks definisi literal benar-benar mungkin dalam bahasa statis diketik (setidaknya dalam C # dan Java) karena saya telah menggunakan mereka sebelumnya. Dalam bahasa yang diketik secara statis mereka disebut 'Inisialisasi Objek'. Berikut adalah beberapa tautan untuk menunjukkan penggunaannya di Java dan C # .