Здравствуйте, SkyDance, Вы писали:
SD>"Но он же не ветеринар!" (С) анекдот.
SD>Да, книжная строка, в которой 72 символа, и где-то 60-64 непустых в среднем, вполне комфортны. Однако агрессивные стадА любителей под одну гребенку всегда требуют, чтобы гребенка была их. А значит, для "{" и "}" требуется отдельная строчка, и написать if (a > 1) x++ следует не в одну, а в 3 строки (или 4, если, как нравится многим, перед if требуется оставить пустую строку):
Открывающая скобка в той же строке, где и условие/цикл экономит только одну строку текста, но тратит кучу ментальных сил читающего этот говнокод.
А
if (a > 1) x++; банально не позволяет поставить точку останова на ветке, когда условие выполнилось. Покажи мне IDE с отладчиком под плюсы, где на таком выражении можно поставить брикпоинт так, чтобы он срабатывал только при выполнении условия, и без гемора по заданию доп условий срабатывания этого брикпоинта. Такое годно только для тривиальнейших случаев типа такого:
iterator begin () { return m_map.begin (); }
const_iterator begin () const { return m_map.begin (); }
const_iterator cbegin() const { return m_map.cbegin(); }
iterator end () { return m_map.end (); }
const_iterator end () const { return m_map.end (); }
const_iterator cend () const { return m_map.cend (); }
SD>SD>if (a > 1)
SD>{
SD> x++;
SD>}
SD>
Я так обычно не делаю, да, это лишнее, если и
if и его последующие
else if все обходятся одной строчкой. Я экономлю строку таким образом:
if (cond==1)
++x;
else if (cond==10)
x += 2;
else if (cond==11)
x += 25;
else
x = 100500;
Но вообще в скоупе тоже есть некоторый смысл, если есть подозрение, что там может быть раскрытие макроса.
Ещё момент такой — мне рассказывал знакомый, который скачет между языками, и много пишет как на плюсах, так и на питоне. Он говорил: "переключаясь с питона на плюсы я могу профакапить момент, что вложенность в плюсах не определяется отступом, поэтому любое вложенное выражение, даже однострочное, обрамляю на плюсах скоупом". И этот факап легко проскочит необнаруженным, если
if был без
else
SD>А коли к тому еще и else добавить, то даже самый простой код быстро начинает требовать вертикального скроллинга. Вместо того, чтобы уместиться в пару строк.
У тебя нет денег на мышку с колёсиком? Я вообще думал, что такие уже лет 20 вообще не делают. По-моему, как раз такие мышки без колёсика в наше время должны стоить космических денег
SD>Как человек, читающий очень много кода — нет ничего хуже необходимости вертикального скроллинга.
Как человек, читающий много кода — нет ничего хуже K&R стиля
SD>Поэтому идиотизм из серии "в этой функции 60 строк, слишком длинная, разделим на 3 по 20" есть идиотизм, и ничего более. Три функции по 20 строк, между которыми передаются все переменные, читать сложнее, чем одну 60-строчную. Выделять отдельные сущности нужно тогда и только тогда, когда этим можно уменьшить размер контекста.
Это идиотизм другого рода — слишком тупой рефакторинг. Нормальный рефакторинг сделал бы из этой кучи параметров
struct Context, которая передавалась бы единственным аргументом, и которую было бы легко дополнять, не меняя сигнатуры функций. У меня такое бывает, и после пары расширений списка параметров набора функций параметры сначала переезжают в контекст, а при дальнейшем рефакторинге это становится классом со своими методами. А старые функции, принимавшие структуру контекста, вырождаются в функции, вызывающие методы класса контекста.
Но этот даже такой тупой рефакторинг обычно производится не потому, что "функция слишком длинная", а потому, что понадобилось написать ещё одну функцию, которой нужна часть кода из это 60ти-строчной функции.