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 usare ciascuno?

    
posta JNF 14.06.2012 - 12:32
fonte

2 risposte

12

Se la lingua li supporta correttamente (ad esempio, type-safety, se applicabile), preferirei argomenti opzionali per i seguenti motivi:

  • Trasmettono meglio il tuo intento in modo che nessuno sospetti che il sovraccarico della tua funzione farà qualcosa di diverso (che probabilmente non dovrebbe comunque).
  • Meno codice da mantenere, anche se la funzione overload assegna solo quella più completa. Se vuoi rinominare la funzione in un secondo momento, hai almeno 3 posti per farlo (due definizioni + una chiamata).
  • Il compilatore (se presente) potrebbe generare file binari più piccoli.
  • Gli argomenti opzionali sono migliori, almeno in alcune lingue. Cosa succede se si desidera avere 3 argomenti opzionali con la possibilità di combinare? Per garantire la massima flessibilità, sono necessari 6 sovraccarichi per farlo.
  • Se si tratta di un metodo a oggetti, sovraccarichi multipli ostacoleranno notevolmente l'implementazione delle sostituzioni nelle sottoclassi.
risposta data 14.06.2012 - 12:47
fonte
0

Assumendo un tipo di situazione del costruttore: spesso scelgo un modello di generatore fluente per evitare situazioni con molte opzioni.

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

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

    
risposta data 14.06.2012 - 13:05
fonte

Leggi altre domande sui tag