Sobrecarga o parámetros opcionales

10

Cuando tengo una función que podría o no recibir un determinado parámetro, ¿es mejor sobrecargar la función o agregar argumentos opcionales?

Si cada uno tiene sus altibajos, ¿cuándo usaría cada uno?

JNF
fuente
Desde la perspectiva de la optimización, tener parámetros opcionales es una mejor opción.
Maneet Puri

Respuestas:

12

Si el lenguaje los admite correctamente (por ejemplo, seguridad de tipo, si corresponde), preferiría argumentos opcionales por las siguientes razones:

  • Transmiten su intención mejor para que nadie sospeche que la sobrecarga de su función hará algo diferente (que probablemente no debería de todos modos).
  • Menos código para mantener, incluso si la sobrecarga de la función solo delega a la más completa. Si desea cambiar el nombre de la función más tarde, tiene al menos 3 lugares para hacerlo (dos definiciones + una llamada).
  • El compilador (si lo hay) podría generar binarios más pequeños.
  • Los argumentos opcionales se escalan mejor, al menos en algunos idiomas. ¿Qué sucede si desea tener 3 argumentos opcionales con la capacidad de mezclar y combinar? Para una flexibilidad total, necesitaría 6 sobrecargas para hacer eso.
  • Si es un método de objeto, las sobrecargas múltiples dificultarán en gran medida la implementación de anulaciones en subclases.
Benjamin Kloster
fuente
¿No necesitarías 8? Tres argumentos opcionales a, by ctiene estas posibilidades: nada, a, b, c, ab, ac, bc, abc. Es 2^npara diferentes tipos, non!
Mark
0

Suponiendo un tipo de situación de constructor: a menudo elijo un patrón de generador fluido para evitar situaciones con muchas opciones.

P.ej. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))es un ejemplo de llamar a una interfaz de generador fluida implementada en Guava.

Por supuesto, ahora necesita un objeto separado para mantener el estado de su generador, pero reduce la complejidad general al separar el comportamiento de la construcción del comportamiento de lo construido.

Dibbeke
fuente
Esto no responde la pregunta.
Andy