Контекст
У Чистому коді на сторінці 35 написано
Це означає, що блоки, якщо оператори, оператори else, в той час як оператори тощо, повинні бути довгими на один рядок. Можливо, ця лінія повинна бути викликом функції. Це не тільки робить функцію, що вкладається, невеликою, але й додає документальну цінність, оскільки функція, викликана всередині блоку, може мати добре описову назву.
Я повністю згоден, це має багато сенсу.
Пізніше, на сторінці 40, йдеться про аргументи функції
Ідеальна кількість аргументів для функції дорівнює нулю (niladic). Далі йде один (монадичний), за ним близько два (діадічний). По можливості слід уникати трьох аргументів (тріадичних). Більше трьох (поліадичних) вимагає дуже спеціального обґрунтування - і тоді їх не можна використовувати. Аргументи важкі. Вони забирають багато концептуальної сили.
Я повністю згоден, це має багато сенсу.
Проблема
Однак досить часто мені здається, що я створюю список з іншого списку, і мені доведеться жити з одним із двох злом.
Або я використовую два рядки в блоці , один для створення речі, один для додавання його до результату:
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;
}
Або я додаю аргумент до функції для списку, куди буде додана річ, зробивши її "на один аргумент гірше".
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
Питання
Чи є (не) переваги, яких я не бачу, які роблять одне з них переважнішим взагалі? Або є такі переваги в певних ситуаціях; у такому випадку, на що слід звернути увагу, приймаючи рішення?
f(g(x))
суперечить вашому довіднику стилів, я не можу виправити ваш посібник зі стилів. Я маю на увазі, ви також не розділилися sqrt(x*x + y*y)
на чотири рядки, чи не так? І це три (!) Вкладених підвираження на двох (!) Внутрішніх рівнях гніздування (ах!). Ваша мета повинна бути читабельністю , а не окремими заявами операторів. Якщо ви хочете пізніше, я маю для вас ідеальну мову: Асемблер.
mov
інструкції x86 та єдиний jmp toStart
в кінці. Хтось насправді зробив компілятор, який робить саме так: D
rlwimi
інструкцію щодо КПП. (Це означає, що негайне вставлення маски Rotate Left Word.) Ця команда займала не менше п'яти операндів (два регістри та три безпосередніх значення), і вона виконувала такі операції: Один вміст реєстру повертався негайним зсувом, маска - створений з одним прогоном в 1 біт, який контролювався двома іншими безпосередніми операндами, і біти, які відповідали 1 біту в цій масці в іншому операнді реєстру, були замінені на відповідні біти повернутого регістра. Дуже класна інструкція :-)
flurps.Add(CreateFlurp(badaBoom));
?