Al compilatore non interessa quale di questi usi. Immagina di averlo scritto come due costruttori, e hanno finito per circa 20 righe. Inoltre immaginare che 19 delle linee erano identici, e la linea diversa lettura
foo = 0;
in una versione e
foo = optional;
nell'altra. In questa situazione, l'utilizzo di un parametro opzionale rende il codice molto più leggibile e comprensibile. In un'altra lingua, che non aveva parametri opzionali, dovresti implementare questo facendo sì che la versione a un parametro chiamasse la versione a due parametri e passasse a zero come secondo parametro.
Ora immagina una coppia diversa di costruttori o funzioni che di nuovo sono lunghe circa 20 righe ma sono completamente diverse. Ad esempio, il secondo parametro è un ID e, se viene fornito, si cerca qualcosa nel database e, se non lo è, si impostano i valori su nullptr
, 0 e così via. Si potrebbe avere un valore di default (-1 è famoso per questo), ma poi il corpo della funzione sarebbe pieno di
if (ID == -1)
{
foo = 0;
}
else
{
foo = DbLookup(ID);
}
che potrebbe essere difficile da leggere e renderebbe la funzione singolo molto più a lungo rispetto alle due funzioni separate. Ho visto funzioni con un gigante if
che ha diviso l'intera cosa in due blocchi separati senza codice comune, e ho visto la stessa condizione testata 4 o 5 volte con il progredire del calcolo. Entrambi sono difficili da leggere.
Questo è il concetto di C++.Ci sono molti modi per realizzare molte cose. Ma questi diversi modi hanno scopi diversi e, una volta "ottenute" le sottili differenze, scriverai un codice migliore. In questo caso, "migliore" significa più breve, più veloce (tutti i tempi di esecuzione dei costi di if
s) e più espressivo: le persone che lo leggono possono capire rapidamente le tue intenzioni.
fonte
2013-04-08 10:29:02
Due downvotes e nessun commento? –