Ні, немає стандартних настанов
Але є деякі прийоми, які можуть зробити функцію з великою кількістю параметрів більш переносимою.
Ви можете використовувати параметр list-if-args (args *) або параметр-словник-args (kwargs **
)
Наприклад, у 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')
Виходи:
args1
args2
somevar:value
someothervar:novalue
value
missing
Або ви можете використовувати синтаксис прямого визначення об'єкта
Наприклад, ось виклик jQuery JavaScript для запуску запиту AJAX GET:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Якщо ви подивитеся на клас ajax jQuery, можна встановити ще багато (приблизно 30) властивостей; здебільшого тому, що комунікації ajax дуже складні. На щастя, об'єктний буквальний синтаксис полегшує життя.
C # intellisense забезпечує активну документацію параметрів, тому не рідко бачити дуже складні устрої перевантажених методів.
Динамічно типізовані мови, такі як python / javascript, не мають такої можливості, тому набагато частіше можна побачити аргументи ключових слів та об'єктні буквальні визначення.
Я віддаю перевагу буквеним визначенням об'єктів ( навіть у C # ) для управління складними методами, оскільки ви можете чітко бачити, які властивості встановлюються, коли об'єкт інстанціюється. Вам доведеться зробити трохи більше роботи, щоб обробити аргументи за замовчуванням, але з часом ваш код буде набагато читабельнішим. За допомогою об'єктних буквальних визначень ви можете зламати свою залежність від документації, щоб зрозуміти, що робить ваш код на перший погляд.
ІМХО, перевантажені методи сильно завищені.
Примітка. Якщо я пам’ятаю, що правильний режим доступу лише для читання повинен працювати для літеральних конструкторів об'єктів у C #. Вони по суті працюють так само, як і налаштування властивостей у конструкторі.
Якщо ви ніколи не писали жодного нетривіального коду динамічно набраною (python) та / або функціональною / прототипом на основі мови JavaScript, я настійно пропоную спробувати його. Це може бути освіжаючим досвідом.
Спочатку може бути страшно порушити свою залежність від параметрів для остаточного підходу до ініціалізації функції / методу, але ви навчитесь робити набагато більше з кодом, не додаючи зайвої складності.
Оновлення:
Напевно, я мав би навести приклади, щоб продемонструвати використання в мові статичного типу, але в даний час я не розмірковую в статично набраному контексті. В основному, я робив занадто багато роботи в динамічно набраному контексті, щоб раптом переключитися назад.
Те , що я дійсно знаю, об'єкт синтаксису буквальне визначення цілком можливо в статично типізованих мовах (по крайней мере , в C # і Java) , тому що я використовував їх раніше. У мовах, що мають статичний тип, вони називаються «Ініціалізатори об’єктів». Ось декілька посилань, щоб показати їх використання на Java та C # .