LINUX.ORG.RU

[Правила хорошего кода] Переносы.


0

3

Хотелось бы узнать как и когда принято переносить длинные текст в коде.
На счет «когда» слышал что принято переносить строки если она не умещается в 80-100 символов. Так ли это?
И как следует выравнивать строки после переноса, например:

String str = "Hello " + tmp + 
"world;"
или
String str = "Hello " + tmp + 
             "world";
или
String str = "Hello " + tmp + 
       "world";
Ну и такой же вопрос по применению переноса в методах.
        List<String> usersList = loginHelper.getUsers(SqlUtils.getSqlUtils().SELECT_USER_BY_GROUPS, 
                new String[] {year, group});
или
        List<String> usersList = loginHelper.getUsers(SqlUtils.getSqlUtils().SELECT_USER_BY_GROUPS, 
                                                      new String[] {year, group});
второй вариант вроде лучше читается, но добиться такого результата ТАБами не получается, приходится либо пробелы вставлять либо выравнивание происходит кривовато.
Ну и еще вопрос, где это все в эклипсе настраивается?


Кутекреатор сам расставляет переносы, как в твоем втором вариаент, что, в принципе правильно и читабельно.

Zhbert ★★★★★ ()

>Так ли это?

К сожалению это так, большинство опенсорс-разработчиков - старпёры с 80символьными консолями.

ТАБ

Не нужны.

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

в доке по пайтону нашёл следующее обоснование (цитирую по памяти)

«Переносить строки по 80 символов нужно для того, что-бы люди с устаревшими мониторами могли легко читать ваши файлы, а люди с новыми могли читать по несколько файлов сразу, разделённых горизонтально»

drBatty ★★ ()

Еще можешь гугловый кодинг-стандарт глянуть. Там про это есть. Суть в том, что при переносе нужно делать двойной отсуп.

Выравнивать по переменной/знаку равно/первому аргументу функции - это бред, т.к. при изменении имени переменной/функции придется заново выравнивание делать. Согласитесь, бесполезная трата времени ради сомнительной красоты.

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

+1 к конскому шрифту.

Кроме того, любителей длинных строк следует насильно подписывать на специальную газету, сверстанную в одну колонку.

lodin ★★★★ ()

В эклипс переносы автоматически расставляются по второму варианту и изменить это поведение нельзя(может и можно, но я не нашёл как).
Но мне ближе и приятнее третий вариант, где код начинается с дополнительного отступа. Это и в PEP пайтона сказано, и в гуглостиле.

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

В эклипс переносы автоматически расставляются по второму варианту
Ctrl+A, Ctrl+I у меня расставляет переносы по первому варианту

n4ela ()
Ответ на: комментарий от bvvv

Табы в исходниках не нужны.

Опять споры о том, что лучше: пробелы или табуляции? Я, например, терпеть не могу, когда в исходниках форматирование делается пробелами...

Eddy_Em ☆☆☆☆☆ ()

Предпочитаю

String str = «alef beit »
+ «gimel dalet»;

Отсутствие ";" в конце намекает на продолжение, а наличие «+» в начале прямо говорит о том, что строка не самостоятельная.

lodin ★★★★ ()

Красивее, ИМХО, так:

snprintf(str, size, "Длинная-длинная первая строка %s"
     "длинная-длинная вторая строка "
     "можно еще и третью строку добавить",
     tmp);

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от drBatty

в доке по пайтону нашёл следующее обоснование (цитирую по памяти)

«Переносить строки по 80 символов нужно для того, что-бы люди с устаревшими мониторами могли легко читать ваши файлы, а люди с новыми могли читать по несколько файлов сразу, разделённых горизонтально»

Конечно же, это древняя чушь. Код с короткими строчками всего лишь удобен для чтения и восприятия. 80 символов длина сторки терминала в древности и сейчас это просто условная принятая длина строки.

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

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

>Конечно же, это древняя чушь. Код с короткими строчками всего лишь удобен для чтения и восприятия.

Код с короткими строчками прежде всего удобнее, когда открыты два файла рядом. И при diff-е.

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

Это всё второстепенное, дополнительные плюшки.

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

А что кроме 80 символов есть стол же стандартное? У всех же разные мониторы и текстовые редакторы.

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

Да, достаточно часто. Самый распространенный случай применения - одновременно открытые модуль реализации и модуль с тест-кейсами к нему.

shylent ()
Ответ на: комментарий от mashina

>Конечно же, это древняя чушь. Код с короткими строчками всего лишь удобен для чтения и восприятия. 80 символов длина сторки терминала в древности и сейчас это просто условная принятая длина строки.

вовсе нет!

1) жутко неудобно работать сразу с тремя файлами при слиянии. Хотя... Mercurial не нужен?

2) жутко неудобно читать длинные строки. Даже если они легко вмещаются в мой монитор.

3) ну хорошо, у себя дома я легко открою и по 255 букв в строке. А если придётся править код не у себя дома? Через какую-нить путти в какой-нибудь недоос, на каком-то бюджетном мониторе 1024х768 с ужасными шрифтами?! Причём СРОЧНО. Люто, бешено бесит.

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

Спор религиозный, но лично я вставляю 2 табуляции, или 8 пробелов после разрыва.

drBatty ★★ ()

ИМХО, код нужно писать так, как тебе удобно, а отформатировать его - несложное дело, главное, что-бы он был понятен, а такие фразы, как: «К сожалению это так, большинство опенсорс-разработчиков - старпёры с 80символьными консолями.» уже не актуальны (ИМХО), да и если они такие жуть как «старпёры», то, наверно уж сумеют код прочитать... и даже с «80символьными консолями».

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

> ИМХО, код нужно писать так, как тебе удобно

Понятно, что твои лабораторки никому кроме тебя не нужны и ты можешь писать их как тебе удобно. Над промышленным же кодом как правило работают группы разработчиков и писать так как удобно тебе не получится.

anonymous ()
Ответ на: комментарий от congestion_control

> К сожалению это так, большинство опенсорс-разработчиков - старпёры с 80символьными консолями.

К твоему сожалению, есть не мало людей, которые любят распечатать фрагменты кода на бумаге для дальнейшего изучения и они тоже негодуют из-за длинных строчек.

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

но дифф и мерж удобно делать именно так.

ясно. мне так удобнее с conflict markers. Для трёх окон места на ноуте не хватает.

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

Постоянно. С одной стороны файл реализации с другой — заголовок какого-нибудь класса.

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

>а наличие «+» в начале прямо говорит о том, что строка не самостоятельная.

Плюсую. Строки не должны сами по себе болтаться.

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

Если ты тролль - тебе ничего не поможет, увы... Дочитай, пожалуйста хоть 50% предложения и до тебя наверно дойдёт, что я написал: «од нужно писать так, как тебе удобно, а отформатировать его - несложное дело»..

Увы...

uralex ()
Ответ на: комментарий от lodin

Отсутствие ";" в конце намекает на продолжение, а наличие «+» в начале прямо говорит о том, что строка не самостоятельная.

В общем виде это ни о чём не говорит. Первая строка может быть вполне себе завершённой, а вторая самостоятельной (+ так же и унарный оператор)

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

Конечно же,

String str = "alef beit "
      + "gimel dalet";

Прошу прощения за невнимательность с пробелами.

lodin ★★★★ ()

согласно KNF:

     Indentation is an 8 character tab.  Second level indents are four spaces.

           while (cnt < 20)
                   z = a + really + long + statement + that + needs +
                       two + lines + gets + indented + four + spaces +
                       on + the + second + and + subsequent + lines;

     Do not add whitespace at the end of a line, and only use tabs followed by
     spaces to form the indentation.  Do not use more spaces than a tab will
     produce and do not use spaces in front of tabs.

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

> Дочитай, пожалуйста хоть 50% предложения и до тебя наверно дойдёт

На практике никто не занимается переформатированием кода под себя. Разработчики просто придерживаются принятого Coding Style в независимости от того нравится он им или нет.

PS: не считай себя умнее других если ты таковым не являешься

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

А ты таковым являешься ?

Я пишу код так, как мне надо, остальное - мелочи, неужели не понятно ? Основываюсь на своих «поянтиях» и что - то никто мне пальцем не тыкал на Ubuntu developer summit в мае 2008, что я код хреново представляю... Ты имя сначала своё покажи, а потом поговорим, анонимус....

uralex ()
Ответ на: комментарий от KblCb

>Ограничение в 80 символов позволяет читать сразу два файла без особых затруднений.

На 1280х1024 все равно будут концы строк обрезаны, иои придется шрифт уменьшать

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

>ИМХО, код нужно писать так, как тебе удобно

Правильно говоришь. И 80 символов - это удобно, так как при чтении глазам не надо бегать по горизонтали

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

И причём тут код «под себя» ? Разговор идёт про «код под других».. ? (в плане представления и форматирования)

uralex ()

Принято так, как написано в coding conventions в команде, в которой ты работаешь.
В эклипсе можно настроить тыщу параметров, емнип, и форматировать при сохранении. Где - не помню.

JackyTreehorn ()

И вообще, вы как будто на века пишите.

Проблема выеденного яйца не стоит.

anonymous ()
Ответ на: комментарий от annulen

У меня 1600x900, а на недобуке и правда немного не умещается.

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

>И вообще, вы как будто на века пишите.

Если он вдруг пишет опенсорц, то плохо написать - это плюнуть в вечность

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

Я тоже пишу 80, но давно заметил, что удобно мне 132 (иногда и так пишу).
И всегда мучал вопрос - а что если неудаётся избежать глубоких вложений?
Ну вот у вас вложение 4 скажем - уже от строки осталось 48 и вот вам надо её перенести, а тут предлагают на 2 таба (я не больше чем на 1 сдвигаю, а чаще всего на 2 или 4 пробела) - т.е. 32. Супер.

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

Now, some people will claim that having 8-character indentations makes the code move too far to the right, and makes it hard to read on a 80-character terminal screen. The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program.

rg-400 ()
Ответ на: комментарий от rg-400

И что вы мне предлагаете выбрать между красивой и быстрой программой?

Давайте писать процедуры не длиннее 8 строк и функции не более чем с двумя параметрами.

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

>И всегда мучал вопрос - а что если неудаётся избежать глубоких вложений?

Выделять в функцию. Глубокие вложения делают код нечитаемым

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

>Давайте писать процедуры не длиннее 8 строк и функции не более чем с двумя параметрами.

Давайте

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