Совет минимизировать область видимости переменной общеизвестен. Минимальная область видимости это область видимости неименованной переменной, тем не менее часто избегают писать так:
Здравствуйте, igna, Вы писали:
I>Совет минимизировать область видимости переменной общеизвестен. Минимальная область видимости это область видимости неименованной переменной, тем не менее часто избегают писать так:
I>
Здравствуйте, igna, Вы писали:
I>Совет минимизировать область видимости переменной общеизвестен. Минимальная область видимости это область видимости неименованной переменной, тем не менее часто избегают писать так:
I>
A> var customer = variable1.Method1(variable1A, variable1B);
A> var totalPrice = variable2.Method2(variable2A, variable2B);
A> var discount = variable3.Method3(variable3A, variable3B);
A> if (DoSomethingUseful(customer, totalPrice, discount))
A> {
A> . . .
A> }
A>
Это то же, что и мой второй вариант. Разумеется, вместо par1, par2 и par3 будут использованы более информативные имена, как впрочем и вместо variable1, Method1 и так далее. Так, в твоем примере Method1 будет скорее всего называться как-нибудь со словом Customer в имени, так что дополнительное именование переменной ничего не даст.
Здравствуйте, igna, Вы писали:
I>Это то же, что и мой второй вариант. Разумеется, вместо par1, par2 и par3 будут использованы более информативные имена, как впрочем и вместо variable1, Method1 и так далее.
Ну так надо было бы так и написать, а не вводить людей в заблуждения
I>Так, в твоем примере Method1 будет скорее всего называться как-нибудь со словом Customer в имени, так что дополнительное именование переменной ничего не даст.
Прошу переписать пример чтобы быделенное действительно имело место
Здравствуйте, Aikin, Вы писали:
A>Прошу переписать пример чтобы быделенное действительно имело место
using (var serviceHost = new ServiceHost(
typeof(MinimalistSelfHostedWebService),
new Uri("http://localhost:8000/MinimalistSelfHostedWebService")
)) {
. . .
}
var baseAddress = new Uri("http://localhost:8000/MinimalistSelfHostedWebService");
using (var serviceHost = new ServiceHost(typeof(MinimalistSelfHostedWebService), baseAddress)) {
. . .
}
На мой взгляд указание того, что URI является base address ничего не дает, зато объявление переменной заставляет смотреть, не используется ли она где-нибудь внутри using.
I> var par1 = variable1.Method1(variable1A, variable1B);
I> var par2 = variable2.Method2(variable2A, variable2B);
I> var par3 = variable3.Method3(variable3A, variable3B);
I> if (DoSomethingUseful(par1, par2, par3)) {
I> . . .
I> }
I>
Вариантов несколько:
1) Повысить читабельность, так как имя переменной несет в себе смысл. Ибо из одного только вызова бывает непонятно, что возвращается. Ну представь: variable1.Method1(variable1A / 1.46 > object1.GetSomething() ? variable1A : variable1A * this.GetPar(), variable1B)
2) Удобство отладки. В отладчике можно глянуть, какие параметры передаются в DoSomethingUseful
Здравствуйте, igna, Вы писали:
I>На мой взгляд указание того, что URI является base address ничего не дает
Это дело привычки. Если ты привык к синтаксису 1 то вполне нормально. Мне же было сложно определить какой класс мы создаем (т.е. понадобилось искать, а не "кинуть взгляд" и понять). I>зато объявление переменной заставляет смотреть, не используется ли она где-нибудь внутри using.
Так уж и заставляет
В общем, я за первый вариант.
Самое главное в любом подходе -- постоянство. Сами по себе оба подхода хороши (все зависит от привычек), но ни в коем случае не стоит их смешивать (часть вызовов так/часть так).
Здравствуйте, igna, Вы писали:
I>Совет минимизировать область видимости переменной общеизвестен. Минимальная область видимости это область видимости неименованной переменной, тем не менее часто избегают писать так:
Речь о шарпе? Тогда никакой разницы нет. Переменная становится доступной для сборщика мусора сразу после последнего использования.
Здравствуйте, igna, Вы писали:
I>Совет минимизировать область видимости переменной общеизвестен. Минимальная область видимости это область видимости неименованной переменной, тем не менее часто избегают писать так:
...
Некоторая разница все же может быть:
* Порядок вычисления аргументов функции может быть не определен (зависит от языка, в С++ есть кое-какие грабли).
* Эквивалентность(точнее ее возможность) зависит от побочных эффектов функций:
if (DoSomethingUseful(
variable1.Method1(variable1A, variable1B),
variable2.Method2(variable2A, variable2B),
variable2.Method2(variable2A, variable2B)
)) {
. . .
}
var par1 = variable1.Method1(variable1A, variable1B);
var par2 = variable2.Method2(variable2A, variable2B);
if (DoSomethingUseful(par1, par2, par2)) {
. . .
}
Здравствуйте, Lloyd, Вы писали:
L>Речь о шарпе? Тогда никакой разницы нет. Переменная становится доступной для сборщика мусора сразу после последнего использования.
Речь об области видимости, а не о времени жизни. То есть думаем о человеке, читающем программу.
Здравствуйте, igna, Вы писали:
L>>Речь о шарпе? Тогда никакой разницы нет. Переменная становится доступной для сборщика мусора сразу после последнего использования.
I>Речь об области видимости, а не о времени жизни. То есть думаем о человеке, читающем программу.
И в качестве средства заботы о человеке предлагаете инлайнить переменные?
Вы уверены, что читающий будет вам за это благодарен?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Юрий Жмеренецкий, Вы писали:
I>
ЮЖ>> var par1 = variable1.Method1(variable1A, variable1B);
ЮЖ>> var par2 = variable2.Method2(variable2A, variable2B);
ЮЖ>> if (DoSomethingUseful(par1, par2, par2)) {
ЮЖ>> . . .
ЮЖ>> }
I>
I>Я бы это кстати записал так:
...
ЮЖ>> ... зависит от побочных эффектов функций
Я вот что имел ввиду:
int i = 0;
int f1() { return ++i; }
int f2(int a, int b) { return a+b; }
void test()
{
// 1int a = f2(f1(), f1());
// 2int b = f1();
int c = f2(b, b);
assert(a != c);
}