No, no hay una guía estándar
Pero hay algunas técnicas que pueden hacer que una función con muchos parámetros sea más soportable.
Podría usar un parámetro list-if-args (args *) o un parámetro de diccionario de args (kwargs **
)
Por ejemplo, en 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')
Salidas:
args1
args2
somevar:value
someothervar:novalue
value
missing
O puede utilizar la sintaxis de definición literal del objeto
Por ejemplo, aquí hay una llamada jQuery de JavaScript para iniciar una solicitud GET de AJAX:
$.ajax({
type: 'GET',
url: 'http://someurl.com/feed',
data: data,
success: success(),
error: error(),
complete: complete(),
dataType: 'jsonp'
});
Si echa un vistazo a la clase ajax de jQuery, hay un lote (aproximadamente 30) más propiedades que se pueden configurar; Sobre todo porque las comunicaciones ajax son muy complejas. Afortunadamente, la sintaxis literal del objeto facilita la vida.
C # intellisense proporciona documentación activa de parámetros, por lo que no es raro ver arreglos muy complejos de métodos sobrecargados.
Los lenguajes de escritura dinámica como python / javascript no tienen esa capacidad, por lo que es mucho más común ver los argumentos de palabras clave y las definiciones literales de los objetos.
Prefiero definiciones literales de objeto ( incluso en C # ) para administrar métodos complejos porque puedes ver explícitamente qué propiedades se establecen cuando se crea una instancia de un objeto. Tendrá que trabajar un poco más para manejar los argumentos predeterminados, pero a la larga, su código será mucho más legible. Con las definiciones literales de los objetos, puede romper su dependencia de la documentación para comprender qué hace su código a primera vista.
En mi humilde opinión, los métodos sobrecargados están muy sobrevalorados.
Nota: Si recuerdo correctamente, el control de acceso de solo lectura debería funcionar para los constructores de literal de objeto en C #. Básicamente, funcionan igual que establecer propiedades en el constructor.
Si nunca ha escrito ningún código no trivial en un lenguaje basado en javaScript tipificado dinámicamente (python) y / funcional / prototipo, le sugiero que lo intente. Puede ser una experiencia esclarecedora.
Puede ser aterrador primero romper tu confianza en los parámetros para el enfoque de finalización total de la función / método, pero aprenderás a hacer mucho más con tu código sin tener que agregar una complejidad innecesaria.
Actualizar:
Probablemente debería haber proporcionado ejemplos para demostrar el uso en un lenguaje de tipo estático, pero actualmente no estoy pensando en un contexto de tipo estático. Básicamente, he estado haciendo demasiado trabajo en un contexto de tipo dinámico para volver a cambiar repentinamente.
Lo que hago sé es que la sintaxis de la definición literal del objeto es completamente posible en lenguajes tipificados estáticamente (al menos en C # y Java) porque los he usado antes. En los lenguajes tipificados estáticamente se les llama 'Inicializadores de objetos'. Aquí hay algunos enlaces para mostrar su uso en Java y C # .