Как и где разбивать длинные строки кода?
Возможные дубликаты:
Где обернуть строку кода, особенно длинные списки аргументов?
Стандарты кодирования и длина линии
Привет,
- Где вы нарушаете длинные строки кода? (Пример: до или после оператора)
- Если это длинная строка, вы разбиваете строку на подстроки?
- Какие еще случаи существуют при разрыве длинных строк?
6 ответов
С исторической точки зрения, это была старая ширина 80 столбцов из-за размера экрана. Однако, поскольку это не всегда так, я думаю, что не обязательно строго следовать этому.
Однако, если вы думаете об этом, вам не нужно прокручивать экран, чтобы фактически прочитать весь бит кода. Разбить его - это, безусловно, хорошая идея, поэтому придерживаться 80 столбцов облегчает чтение, если вы переходите с широкоформатного экрана на ноутбук.
Вот как я разделил вещи:
1) после оператора
if(longVariableName || someOtherVariable ||
nextVariable)
{
//Some code here.
}
Когда вы читаете код, разбивая его после оператора, означает, что последняя операция (|| в моем примере) была у вас в голове, когда вы начали читать следующий оператор. Облегчает чтение, понимание и понимание.
Это личное предпочтение только потому, что вопрос субъективный, но я склонен следовать этим рекомендациям.
Ограничьте код до 79 символов там, где это возможно (это просто так, что он хорошо печатается с достаточно большим размером шрифта, чтобы мои стареющие глаза могли его прочитать). Обычно я сначала разбиваю их где-то в диапазоне 60, так что неизбежное редактирование строк для устранения проблем не означает, что мне придется много переформатировать:-)
Разбейте линию как можно выше в иерархии. Я имею в виду
x = 1 * 2 + 3 * (4 + 5);
будет сломан в первый раз+
в предпочтении где-либо еще. Это потому, что "элементы" самого высокого уровняx
,1 * 2
а также3 * (4 + 5)
,Используйте отступы разумно, чтобы следующие строки были видны как часть первой строки. Например, если первая строка трехстрочного оператора начинается с 3 вкладок, следующие две строки имеют 4 вкладки.
Что-то вроде:
x = 1 * 2 +
3 * (4 + 5);
или же:
if (1 * 2 =
3 * (4 + 5))
{
doSomething();
}
Последний раз, как правило, единственный раз, когда я ставлю открывающую скобку на отдельной строке. Обычно я бы имел:
if (1 * 2 = 3 * (4 + 5)) {
doSomething();
}
но расщепление делает его похожим на вторую строку if
является частью блока:
if (1 * 2 =
3 * (4 + 5)) {
doSomething();
}
который мне не нравится
Что касается струн, где они длиннее моей предпочтительной ширины, я склонен разбивать их. C и его братья делают это легко, так как компилятор обрабатывает "abc" "def"
точно так же, как "abcdef"
, Даже если будет влияние во время выполнения (например, объединение строк), я разобью их, но все равно постараюсь свести к минимуму такие воздействия.
Пара вариантов:
- Установите стандарт со своими сверстниками.
- Ширина печати.
- Ширина экрана.
-Cheers.
Это зависит от выбранной вами среды: вашего языка, ваших стандартных IDE, коллег и того, что по своей природе выглядит красиво и легко для вас.
Вы не упомянули, какой из них вы выбрали. Если вам когда-либо придется редактировать этот код в окне терминала, вы можете начать с классического режима ожидания: 80 символов - больше, и некоторые терминалы и редакторы CLI ломаются или мучительно переносятся. Именно по этой причине многие IDE предоставят визуальную подсказку на отметке 80-го столбца. Если вы можете разумно ожидать, что все, кто просматривает код, будут использовать полнофункциональные IDE (например, XCode, Eclipse и MS Visual Studio), тогда для вас это не является обязательным требованием.
По моему опыту, все места предпочитают избегать слишком длинных строк, даже когда мы все использовали IDE, которые могли автоматически переносить строки. По моему опыту, перенос строк считается плохим и отключенным во всех ситуациях.
Из семантического контекста я пытаюсь разбить пункты предложения. В основном, если строка заканчивается в пределах 120 символов, я реже разбиваю ее, если нет удобных мест. Если в противном случае он будет длиннее 80 символов, и в нем есть опознаваемые пункты, я разбью их там.
Используемое здесь "предложение" - это выражение, которое может быть заключено в круглые скобки. Математические составные выражения разбиваются на оператора, причем оператор первым делом на последующих строках. Когда речь идет о длинном логическом блоке, как, например, в операторе if или в цикле while / for, применяется то же самое, я разбиваю statemnt на следующие строки с отступом и оператор вначале.
Если вы работаете над OSX с Objective-C, XCode поможет вам. Он автоматически сделает отступ для последующих строк так, чтобы символы ":" были выровнены равномерно. Это дает потенциально легкий для чтения вызов метода.
По сути, вы должны попробовать для себя более длинные строки и решить, в какой момент все становится трудно понять. С письменным текстом (комментарии или художественная литература, оба) я нахожу, что чрезмерно широкие столбцы ощущаются как рунические предложения и позволяют легко потерять свое место. Когда строки длиннее 100 символов в коде, это обычно означает, что есть много предложений, и если вам нужно прокрутить вправо / влево, чтобы прочитать, тогда легко потерять поток того, что пытается сделать ваш код. Наконец, когда в строке примерно 100 символов, у вас может быть два открытых окна кода для сравнения / контраста / контекстной информации... и т. Д. Длинные строки делают это непрактичным.
Многие программисты согласятся, что с аккуратным и чистым стилем кодирования, с которым вы знакомы, вы можете часто обнаруживать линии или зоны, которые являются сложными или беспокоящими по тому, как они выходят за рамки нормы. Это почти подсознательный сигнал, который позволяет вам заметить, когда строка или метод нуждаются в рефакторинге или любви. Гвоздь, который торчит, первым получает молот (если я правильно применил этот народный закон). А слишком длинные строки - это подсказки, которые нужно упростить или прокомментировать.
Там, где оператор достаточно длинный, чтобы его можно было разбить, я постараюсь разбить его на одну строку на "семантический блок", гарантируя, что никакая отдельная строка не может быть ошибочно принята за отдельный оператор (например, начинать с оператора (даже если это точка) чем закончить строку с оператором). Я также сделаю отступ для обозначения любой логической иерархии, если она очевидна.
Когда я говорю семантический блок, я склонен обнаруживать, что в длинном утверждении обычно есть какой-то шаблон, который позволяет разделить его на пару процессов. Они могут быть своими собственными строками, но иногда они достаточно тривиальны для разрыва строки, особенно когда вы используете цепочечный объект.
Поскольку современные IDE поддерживают горизонтальную прокрутку, меня не волнует, какова длина линии как таковой (если это не делает моя команда); только как просто это понять. Но это редко имеет значение, потому что я разбиваю вещи на строки или методы, чтобы их было легче понять, поэтому длина каждой строки автоматически остается короткой.