Sovraccarico o parametri opzionali


10

Quando ho una funzione che potrebbe o non potrebbe ricevere un determinato parametro, è meglio sovraccaricare la funzione o aggiungere argomenti facoltativi?

Se ognuno ha i suoi alti e bassi - quando dovrei usarli?


Dal punto di vista dell'ottimizzazione, l'opzione migliore è avere parametri opzionali.
Maneet Puri,

Risposte:


12

Se la lingua li supporta correttamente (ad es. Sicurezza dei tipi, se applicabile), preferirei argomenti opzionali per i seguenti motivi:

  • Trasmettono meglio le tue intenzioni, quindi nessuno sospetta che il sovraccarico della tua funzione farà qualcosa di diverso (che probabilmente non dovrebbe comunque).
  • Meno codice da mantenere, anche se il sovraccarico della funzione viene delegato solo a quello più completo. Se vuoi rinominare la funzione in un secondo momento, hai almeno 3 posizioni per farlo (due definizioni + una chiamata).
  • Il compilatore (se presente) potrebbe generare file binari più piccoli.
  • Gli argomenti opzionali si adattano meglio, almeno in alcune lingue. Cosa succede se si desidera avere 3 argomenti opzionali con la possibilità di mescolare e abbinare? Per la massima flessibilità, per farlo sono necessari 6 sovraccarichi.
  • Se si tratta di un metodo a oggetti, più sovraccarichi ostacoleranno notevolmente l'implementazione delle sostituzioni nelle sottoclassi.

Non avresti bisogno di 8? Tre argomenti opzionali a, be cha queste possibilità: niente, a, b, c, ab, ac, bc, ABC. È 2^nper diversi tipi, nonn!
Mark

0

Supponendo un tipo di situazione costruttiva: spesso scelgo un modello di costruttore fluente per prevenire situazioni con molte opzioni.

Per esempio. Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))è un esempio di chiamata a un'interfaccia builder fluente implementata in Guava.

Ovviamente ora hai bisogno di un oggetto separato per contenere lo stato del tuo costruttore, ma riduci la complessità complessiva separando il comportamento di costruzione dal comportamento del costruito.


Questo non risponde alla domanda.
Andy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.