Здравствуйте, igna, Вы писали:
I>Затем же, зачем рекомендуют минимизировать область видимости переменной.
Приведенный тобой пример это не минимизация области видимости переменной, которая имеет смыл только если переменная необходима. Ты решаешь вопрос — заводить переменную вообще или нет.
Что тут можно сказать. Самое главное вообще в жизни, и особенно более в программировании это здравый смысл. Придерживаться поведения, диктуемого здравым смыслом, а не фанатически следовать какой-то одной методике, подхваченной где-то.
Так вот. Методика говорит — "не заводите переменных без надобности". Другая методика говорит — "код должен быть самодокументируемым".
Тут есть противоречие, ибо выделение переменной (скажем, в случае твоего примера) повышает самодокументируемость, но вводит ненужную перемернную.
Как понять — какой методике следовать? Это решает здравый смысл.
И объяснить тебе этого полностью с покрытием каждого варианта и частного случая я не могу.
Потому что если бы мог, то фиг бы я тебе это объяснил. Я в таком случае бы написал программу, которая преобразует поганый код в отличный, и заныкал бы ее себе . После чего разбогател бы, эксплуатируя толпы индусов и превращая их ХреноКод (tm) в Мега Шедевры (tm) и демонстрируя оные на выставках.
Re[10]: Минимизируйте область видимости переменной
Здравствуйте, fmiracle, Вы писали:
F>Тут есть противоречие, ибо выделение переменной (скажем, в случае твоего примера) повышает самодокументируемость, но вводит ненужную перемернную.
Последнее всегда верно (к сожалению), а вот с самодокументируемостью дело обстоит так далеко не всегда. Какая самодокументируемость повышается, если результат возвращаемый методом CreateTransglucator() помещается в переменную transglucator? И когда видишь, что один и тот же человек пишет
if (DoSomethingUseful(transglucatorFactory.CreateTransglucator())) {
. . .
}
, то думаешь, что его пугает синтаксис со вложенными скобками. А программа нисколько не становится понятнее, от того что в ней слово transglucator упоминается четыре раза вместо одного.
Здравствуйте, VladD2, Вы писали:
VD>Это удобно при отладке. Ты видишь промежуточные значения без захода в функции.
Вот такое тоже удобно при отладке:
var par1 = variable1.Method1(variable1A, variable1B);
if (DoSomethingUseful(par1)) {
. . .
}
Но чаще пишут все же:
if (DoSomethingUseful(variable1.Method1(variable1A, variable1B)) {
. . .
}
А как только появляются длинные списки параметров, появляются и промежуточные переменные, лишь бы всунуть соответствующие круглые скобки в одну строку. Хотя честно говоря непонятно, чем круглые скобки "хуже" фигурных.
Re[10]: Минимизируйте область видимости переменной
Здравствуйте, Lloyd, Вы писали:
L>Ну так вот и ответь, зачем.
Это просто, она мешается. Например возникает необходимость добавить еще один вызов DoSomethingUseful внутри брока if:
var par1 = variable1.Method1(variable1A, variable1B);
var par2 = variable2.Method2(variable2A, variable2B);
var par3 = variable3.Method3(variable3A, variable3B);
if (DoSomethingUseful(par1, par2, par3)) {
. . .
var par1a = variable1.Method1(variable1A, variable1B);
var par2a = variable2.Method2(variable2A, variable2B);
var par3a = variable3.Method3(variable3A, variable3B);
if (DoSomethingUseful(par1a, par2a, par3)) {
. . .
}
. . .
}
Компилируем, запускаем программу, некоторое время работаем с ней. Вроде все нормально, но что-то не так. Через пару часов обнаруживаем, что во втором вызове по ошибке использован параметр первого.
I>, то думаешь, что его пугает синтаксис со вложенными скобками. А программа нисколько не становится понятнее, от того что в ней слово transglucator упоминается четыре раза вместо одного.
Фабрика трансглюкаторов что-то умеет создавать кроме трансглюкаторов?
Re[11]: Минимизируйте область видимости переменной
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Lloyd, Вы писали:
L>>Ну так вот и ответь, зачем.
I>Это просто, она мешается. Например возникает необходимость добавить еще один вызов DoSomethingUseful внутри брока if:
...
I>А ведь все было так просто:
I>
Здравствуйте, samius, Вы писали:
S>Здравствуйте, igna, Вы писали:
I>>А ведь все было так просто:
[]
S>Это просто? За такое дублирование отстреливают. ExtractMethod!!!
А чтобы не плодить 6 параметров, можно обойтись лямбдой
Re[12]: Минимизируйте область видимости переменной
По поводу твоих придирок: Даже в книгах, за которые авторы деньги получают, в примерах весьма нередко можно найти какие-либо не относящиеся к рассматриваемому вопросу недочеты. Уж для упрощения ли или от авторской лени ... А я и вовсе не пытаюсь ничего продавать, так что не обессудь, мои примеры для людей обладающих способностью мыслить абстрактно.
Здравствуйте, igna, Вы писали:
L>>Ну так вот и ответь, зачем.
I>Это просто, она мешается. Например возникает необходимость добавить еще один вызов DoSomethingUseful внутри брока if:
Бредовый какой-то аргумент. Давай нормальные имена и ничего не будет мешаться.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[11]: Минимизируйте область видимости переменной
Здравствуйте, igna, Вы писали:
I>Компилируем, запускаем программу, некоторое время работаем с ней. Вроде все нормально, но что-то не так. Через пару часов обнаруживаем, что во втором вызове по ошибке использован параметр первого. I>А ведь все было так просто: igna, ты сам себе придумываешь проблемы, а потом их с успехом решаешь.
P.S. Я еще раз настоятельно прошу писать примеры с осмысленными именами! Потому как совсем не видно как будет выглядеть код написанный по твоему подходу. Вполне возможно вопросы отпадут сами собой.