Contesto
In Pulisci codice , pagina 35, si dice
This implies that the blocks within if statements, else statements, while statements, and so on should be one line long. Probably that line should be a function call. Not only does this keep the enclosing function small, but it also adds documentary value because the function called within the block can have a nicely descriptive name.
Sono completamente d'accordo, questo ha molto senso.
Più avanti, a pagina 40, si parla degli argomenti della funzione
The ideal number of arguments for a function is zero (niladic). Next comes one (monadic), followed closely by two (dyadic). Three arguments (triadic) should be avoided where possible. More than three (polyadic) requires very special justification—and then shouldn’t be used anyway. Arguments are hard. They take a lot of conceptual power.
Sono completamente d'accordo, questo ha molto senso.
Problema
Tuttavia, piuttosto spesso mi trovo a creare una lista da un'altra lista e dovrò vivere con uno dei due mali.
O io uso due righe nel blocco , una per creare la cosa, una per aggiungerla al risultato:
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
Flurp flurp = CreateFlurp(badaBoom);
flurps.Add(flurp);
}
return flurps;
}
Oppure I aggiungi un argomento alla funzione per la lista a cui verrà aggiunta la cosa, rendendola "un argomento peggiore".
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
Domanda
Ci sono (dis-) vantaggi che non vedo, che rendono preferibile uno di essi in generale? O ci sono tali vantaggi in determinate situazioni; in tal caso, cosa dovrei cercare quando prendo una decisione?