Re[4]: Ширина кода - газетная vs книжная
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 16.01.25 21:58
Оценка:
Здравствуйте, 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ти-строчной функции.
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.