Kontekst
W Clean Code , strona 35, to mówi
Oznacza to, że bloki w instrukcjach if, instrukcjach else, instrukcjach while i tak dalej powinny mieć długość jednego wiersza. Prawdopodobnie ta linia powinna być wywołaniem funkcji. To nie tylko sprawia, że funkcja zamykająca jest mała, ale także dodaje wartość dokumentalną, ponieważ funkcja wywoływana w bloku może mieć ładnie opisową nazwę.
Zgadzam się całkowicie, to ma sens.
Później, na stronie 40, mówi o argumentach funkcji
Idealna liczba argumentów dla funkcji wynosi zero (niladic). Dalej jest jeden (monadyczny), a następnie dwa (dyadyczny). Tam, gdzie to możliwe, należy unikać trzech argumentów (triadycznych). Więcej niż trzy (poliady) wymagają bardzo specjalnego uzasadnienia - i i tak nie powinny być używane. Argumenty są trudne. Biorą dużo mocy pojęciowej.
Zgadzam się całkowicie, to ma sens.
Kwestia
Jednak często zdarza mi się tworzyć listę z innej listy i będę musiał żyć z jednym z dwóch złych.
Albo używam dwóch wierszy w bloku , jeden do stworzenia rzeczy, jeden do dodania go do wyniku:
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;
}
Lub dodaję argument do funkcji listy, do której rzecz zostanie dodana, co czyni go „jednym argumentem gorszym”.
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
Pytanie
Czy są jakieś (nie) zalety, których nie widzę, które sprawiają, że jedna z nich jest ogólnie lepsza? Czy są takie zalety w niektórych sytuacjach; w takim przypadku, na co powinienem zwrócić uwagę przy podejmowaniu decyzji?
f(g(x))
jest sprzeczne z twoim przewodnikiem po stylu, cóż, nie mogę naprawić twojego przewodnika po stylu. To znaczy, ty też nie dzielisz się sqrt(x*x + y*y)
na cztery linie, prawda? I to trzy (!) Zagnieżdżone podwyrażenia na dwóch (!) Wewnętrznych poziomach zagnieżdżenia (wstrzymanie oddechu!). Twoim celem powinna być czytelność , a nie oświadczenia jednego operatora. Jeśli chcesz później, cóż, mam dla Ciebie idealny język: asembler.
mov
instrukcji x86 i jednego jmp toStart
na końcu. Ktoś faktycznie stworzył kompilator, który robi dokładnie to: D
rlwimi
instrukcji dotyczącej PPC. (To znaczy Obróć lewe słowo Natychmiastowe wstawienie maski). Polecenie to zajęło nie mniej niż pięć operandów (dwa rejestry i trzy bezpośrednie wartości) i wykonało następujące operacje: Zawartość jednego rejestru została obrócona przez natychmiastowe przesunięcie, maska była utworzony za pomocą pojedynczego przebiegu 1 bitów, który był kontrolowany przez dwa inne bezpośrednie argumenty, a bity odpowiadające 1 bitowi w tej masce w drugim argumencie rejestru zostały zastąpione odpowiednimi bitami obróconego rejestru. Bardzo fajna instrukcja :-)
flurps.Add(CreateFlurp(badaBoom));
?