Contexto
No Código Limpo , página 35, diz
Isso implica que os blocos dentro de instruções if, else, while e etc. devem ter uma linha. Provavelmente essa linha deve ser uma chamada de função. Isso não apenas mantém a função anexa pequena, mas também agrega valor documental, porque a função chamada dentro do bloco pode ter um nome bem descritivo.
Concordo completamente, isso faz muito sentido.
Mais tarde, na página 40, ele diz sobre argumentos de função
O número ideal de argumentos para uma função é zero (niládico). A seguir vem um (monádico), seguido de perto por dois (diádico). Três argumentos (triádicos) devem ser evitados sempre que possível. Mais de três (poládicos) exigem justificativas muito especiais - e, portanto, não devem ser usadas de qualquer maneira. Argumentos são difíceis. Eles tomam muito poder conceitual.
Concordo completamente, isso faz muito sentido.
Questão
No entanto, muitas vezes me pego criando uma lista de outra lista e terei que viver com um dos dois males.
Ou eu uso duas linhas no bloco , uma para criar a coisa e outra para adicioná-la ao resultado:
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;
}
Ou adiciono um argumento à função da lista à qual a coisa será adicionada, tornando-a "um argumento pior".
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
Questão
Existem (des) vantagens que não estou vendo, o que torna um deles preferível em geral? Ou existem tais vantagens em determinadas situações; Nesse caso, o que devo procurar ao tomar uma decisão?
f(g(x))
é contra o seu guia de estilo, bem, não posso consertá-lo. Quero dizer, você também não se divide sqrt(x*x + y*y)
em quatro linhas, não é? E são três (!) Subexpressões aninhadas em dois (!) Níveis de aninhamento interno (suspiro!). Seu objetivo deve ser legibilidade , não declarações de operador único. Se você quiser mais tarde, bem, eu tenho a linguagem perfeita para você: Assembler.
mov
instruções x86 e uma única jmp toStart
no final. Alguém realmente fez um compilador que faz exatamente isso: D
rlwimi
instruções infames sobre o PPC. (Significa Rotate Insert Left Immediate Mask Insert.) Esse comando levou pelo menos cinco operandos (dois registros e três valores imediatos) e executou as seguintes operações: Um conteúdo de um registro foi rotacionado por uma mudança imediata, uma máscara foi criado com uma única execução de 1 bits que foi controlada pelos outros dois operandos imediatos, e os bits que correspondiam a 1 bits nessa máscara no outro operando de registro foram substituídos pelos bits correspondentes do registro girado. Instrução muito bacana :-)
flurps.Add(CreateFlurp(badaBoom));
?