Сообщение от Randomize
Невнимательно прочитал = плохой программист.
|
Вывод правильный. Непонятно, зачем усложнять жизнь, провоцируя возможность неправильного прочтения. Ну, утрируя: можно использовать переменные с именами a, b, c - они же короче.
По теме: думается, без конкретики - общо - ответить сложно. Лично я, последнее время, опасаюсь, что транслятор прохлопает и не оптимизирует участок кода (или наоборот -некстати), поэтому стараюсь чётко указывать в какой момент понадобился результат вызова функции, где и сколько его надо удерживать. Особенно, если потом, внезапно, кусок будет выполняться в отдельном потоке или семантика функции слегка изменится (кеширование). Сравни
for(int i=0;i<SizeOfList();i++)
и
int ListSize=SizeOfList();
for(int i=0;i<ListSize;i++)
С тем же объявлением счётчика в заголовке: одни трансляторы его видят после цикла, другие - нет. Приходится давать ему осмысленное имя и высовывать до цикла.
В примере АВТОМАТ-а - всё выглядит опрятно (и я с MFC впитал такой код). Пока не понадобится дописать ещё несколько условий. Потом транслятор оптимизирует вычисление условий (например, в ситуации
1 OR x - x можно не вычислять) и уже нет гарантии, что функция CountAllHuitaEverywhereVeryLong() будет всегда вызваться, а ведь её результат может быть необходим.
А если транслятор очень болезненно реагирует на неявные касты? А если в ходе рефакторинга поменяется тип возвращаемого значения или появится конструктор, который может быть неявно вызван для приведения - так что каст будет работать не так, как ожидается?
В одном учебнике, автор настоятельно советовал, например, обязательно ставить скобки, обособляя тело цикла или then-часть из одного условия.
Этот приём (присваивание в условии) как эллипсис: с одной стороны - очень удобно и, в общем-то, интуитивно понятно, с другой - чуть зазеваешься и готово!
Резюмируя: и да, и нет - всё хорошо к месту.