analizer 26.12.2011 08:51 mcabber

недавняя кладка кирпичей от дедфуда навела меня на решение давнего вопроса
стиля кода. а именно как правильно писать:
T func(U param) {
if (param.bad())
return T();
T t;
// fill 't' with data
}
или
T func(U param) {
T t
if (!param.bad()) {
// fill 't' with data
}
return t;
}

после прочтения поста дедфуда, становится очевидным, что второй вариант не
только симпатичнее, но и оптимальнее, в силу действующего в нём RVO.
Пойду попереписываю свои говнокоды.

Recommended by: @0xd34df00d, @DZhon
1. 0xd34df00d 26.12.2011 08:53 Azoth_primary

Да у тебя же преждевременная оптимизация!

2. analizer0xd34df00d /1 26.12.2011 08:53 mcabber

code style ≠ premature optimization, так что всё ок.

3. ulidtko 26.12.2011 09:09

подождите, говно ведь какое-то. Под if должна быть та ветка, которая короче.

4. 0xd34df00dulidtko /3 26.12.2011 09:09 Azoth_primary

Именно.

5. analizerulidtko /3 26.12.2011 09:11 mcabber

это предрассудок.

6. analizeranalizer /5 26.12.2011 09:12 mcabber

там одна ветка. она не может быть короче или длиннее.

7. 0xd34df00danalizer /6 26.12.2011 09:13 Azoth_primary

Там две ветки.

8. analizer0xd34df00d /7 26.12.2011 09:15 mcabber

одна ветка, один return, и не надо делать вид что веток две.

9. analizer0xd34df00d /4 26.12.2011 09:17 mcabber

ладно, хватит полемики. предложи лучший вариант

10. ulidtkoanalizer /8 26.12.2011 09:18

if(condition) {
do_foo;
return;
}

do_bar;
return;

Это эквивалентно:
if(!condition) {
do_bar;
return;
}

do_foo;
return;

Веток две.

11. analizerulidtko /10 26.12.2011 09:19 mcabber

спасибо, кэп. вот только пример приведён для случая, когда ветки неэквивалентны

Do you really want to delete ?