LINUX.ORG.RU

Тонкости форматирования кода в скобкоязыках

 , ,


0

2

Внимание! Этот тред не про табы vs пробелы! Все и так знают, что единственный адекватный стиль это «табы для отступов, пробелы для выравнивания».

Тред про другое. Допустим, мне нравится стиль при котором бинарный оператор (точка с запятой в for) при разбиении строки переносятся на новую строку и выравниваются друг под другом. Например:

// арифметические выражения
auto a = 2
       + 3
// if
if (  very_long_condition_1
   && very_long_condition_2
// вызов функции
very_long_function_name( very_long_argument_1
                       , very_long_argument_2
// и даже цикл for!
for ( int i = 0
    ; i < N
    ; ++i

Плюс сюда можно добавить base and member initializer list, где строки начинаются с запятой и т.п.

У меня остаётся ряд нерешённых вопросов:

  1. Где ставить точку с запятой в арифметическом выражении?
  2. Где ставить закрывающую скобку и точку с запятой при вызове функции?
  3. Где ставить закрывающую скобку и открывающую фигурную для if/for? Должно ли положение открывающей фигурной отличаться для случая однострочного и многострочного условия? Пока я для себя решил, что стиль K&R, но при многострочном условии открывающая скобка на новой строке. Это если закрывающая круглая была на той же, где и последнее условие.
  4. Где ставить двоеточие в initializer list при переносе: все равно после имени конструктора или на новой строке перед первым членом списка?
  5. Придерживаться ли правила «всё или ничего»: помещать все условия или все аргументы на одной строке, если влезают и помещать каждый в своей строке, если не влезают? Или сувать в строку пока влезают и переносить первый невлезший? Больше склоняюсь к «всё или ничего».

ЛОР поможет ответить на эти вопросы, ну или хотя бы попытается.

Если аримфметический оператор имеет префиксную форму, то лучше использовать её.

a = (+) 2
        3

olibjerd ★★★★★ ()
Последнее исправление: olibjerd (всего исправлений: 1)

1, 2, 3 - закрывающие имхо на последней «значащей» строке, так фолдинг в редакторах приятнее работает.

arkhnchul ★★ ()

У меня остаётся ряд нерешённых вопросов

Этот тред добавит новых.

i-rinat ★★★★★ ()
// арифметические выражения
auto a = (
    2
    + 3)
// if
if (
    condition1
    && condition2)
// вызов функции
f(
    arg1,
    arg2)
// и даже цикл for!
for (
    int i = 0;
    i < N;
    ++i)
anonymous ()
Ответ на: комментарий от utf8nowhere

а операции и разделители аргументов?

anonymous ()

даёшь SQL-style !

Где ставить точку с запятой в арифметическом выражении?

на новой строке, на уровне где началось выражение

Где ставить закрывающую скобку и точку с запятой при вызове функции?

скобку на новой строке, на уровне где начинались параметры, ";" см.пред пункт

и так далее..вас конечно будут пинать ногами, но вы мужайтесь :-)

MKuznetsov ★★★★★ ()
Ответ на: комментарий от utf8nowhere

открывающая и первое/единственное условие в if и выражение инициализации в for - на той же строке, опять же, для фолдинга. Так хоть как-то можно будет ориентироваться в сжатых блоках. K&R придумывали свой стиль, когда редакторы были маленькие и фолдить блоки кода не умели.

arkhnchul ★★ ()

Тебе платят за строчки кода что ли?

И ты подумал о тех, кто потом это читать за тобой будет?

Pythagoras ★★ ()
Ответ на: комментарий от Pythagoras

Конечно подумал.

Операторы с новой строки — это на порядок читабельнее, чем если их лепить в конец старой.

utf8nowhere ★★ ()
Ответ на: комментарий от utf8nowhere

Операторы с новой строки — это на порядок читабельнее, чем если их лепить в конец старой.

Нет. Читабельно - это видеть операторы там, где ожидаешь их увидеть. И ещё: столбцов много, а строчек - нет. Твой код вытягивается в вертикальную линию, неэффективно используя строчки, в результате большая часть экрана пустая, а на экран влезает гораздо меньше кода, из-за этого в нём сложнее ориентироваться и визуально отделять блоки друг от друга.

Ты б ещё текст в три колонки писал!

Pythagoras ★★ ()
Ответ на: комментарий от Pythagoras

Ты аутист, что ли?

Я переношу только когда в 80 или ещё во сколько символов в строке не влазит. «2 + 3» перенёс только для примера.

utf8nowhere ★★ ()

У тебя монитор установлен вертикально? Какой-то жирный по строчкам получился стиль.

jollheef ★★★★★ ()
Ответ на: комментарий от utf8nowhere

Ты аутист, что ли?

Нет, насколько мне известно. И спасибо за переход на личности, это мой последний пост в этом топике.

Я переношу только когда в 80 или ещё во сколько символов в строке не влазит.

И часто у тебя for не влазит в 80 символов?

Pythagoras ★★ ()
Ответ на: комментарий от jollheef

А вот и танкисты подтянулись. Как там в танковой щели обзор, нормально?

deep-purple ★★★★★ ()
Ответ на: комментарий от Pythagoras

Он нетолько про фор, еще и про много аргументов в функции. И да, я за перенос на новую линию т.к. еще и откаментить можно каждую, если понадобится.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

А вот и танкисты подтянулись. Как там в танковой щели обзор, нормально?

Такой code style любой монитор превратит в танковую щель.

jollheef ★★★★★ ()
Ответ на: комментарий от jollheef

Любишь макароны в танковой щели — не корми ими других.

И я даже за ТСа повторю — приведенный выше код это просто примеры для ситуаций когда длина строки вдруг вылазиет за 80 символов.

Почему 80 надеюсь объяснять не надо. Но! Есть еще 120 символов. Оно появилось от того, что танкисты продавили таки это в рекомендации для стандартов форматирования.

Если в конторе или внутри проекта существует строго определенный стандарт как должен форматироваться код — нужно засунуть свое мнение куда подальше и писать как там требуют. Если невмоготу — выносить этот вопрос на коллективное обсуждение. Других вариантов быть не может.

А те, кто пишет проект в одиночку, либо говнокодят наплевав на форматирование, и никуда дальше манямирка этот код не вылезет.

Либо, заглядывая вперед, обязательно пишут (в соответствии с самым распространенным стандартом под свой ЯП) требования форматирования кода в своем проекте, выполняют эти требования сами и требуют их выполнения от других.

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

приведенный выше код это просто примеры для ситуаций когда длина строки вдруг вылазиет за 80 символов.

Ясно. Тогда другое дело.

Сам использую 80 (няшная сишка, табы в 8 пробелов), зависимость есть.

jollheef ★★★★★ ()
Ответ на: комментарий от jollheef

табы в 8 пробелов

Это вкусовщина. Главное что у тебя там действительно табы.

deep-purple ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.