Обтекание строк кода — как обрабатывать длинные строки

Я столкнулся с определенной строкой длиной 153 символа. Теперь я склонен ломать текст после 120 символов (конечно, это сильно зависит от того, где я нахожусь, и от местных правил). Но, честно говоря, везде, где я разрываю строку, это выглядит плохо. Поэтому я ищу некоторые идеи о том, что я должен сделать для этого.

Вот строка:

private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper = new HashMap<Class<? extends Persistent>, PersistentHelper>();

Я открыт как к идеям о том, как/где разорвать линию (и почему), так и к способам укоротить саму линию.

Мы не являемся магазином Java, и для такого рода вещей нет местных соглашений, или, очевидно, я бы просто следовал им.

Спасибо!


person corsiKa    schedule 16.09.2010    source источник


Ответы (5)


Как правило, я разбиваю строки перед операторами и делаю отступ для последующих строк:

Map<long parameterization> longMap
    = new HashMap<ditto>();

String longString = "some long text"
                  + " some more long text";

Мне ведущий оператор четко передает, что "эта линия была продолжена из чего-то другого, она не стоит сама по себе". У других людей, конечно, другие предпочтения.

person Anon    schedule 16.09.2010
comment
И в качестве связанного комментария: было бы неплохо, если бы в Java было typedef? - person Anon; 16.09.2010
comment
Да, да, было бы. Я бы даже согласился на ¯os - person corsiKa; 16.09.2010
comment
Я согласен с разрывом перед операторами, за исключением оператора присваивания, мне труднее читать, когда ваш = находится во второй строке. И скоро в Java появится оператор Diamond :) - person Colin Hebert; 17.09.2010
comment
Я предполагаю, что когда я рассматриваю два, я предпочитаю это даже для =. Я полагаю, что это просто дело вкуса, но когда я смотрю на это, это имеет смысл. - person corsiKa; 17.09.2010

Вот как это делаю я, и Google делает это мой метод.

  • Перерыв перед символом для операторов без присваивания.
  • Перерыв после символа = и ,.

В вашем случае, поскольку вы используете 120 символов, вы можете сломать его после того, как оператор присваивания приведет к

private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper =
        new HashMap<Class<? extends Persistent>, PersistentHelper>();

В Java и для этого конкретного случая я бы поставил две табуляции (или восемь пробелов) после разрыва, в зависимости от того, используются ли табуляции или пробелы для отступа.

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

person Daniel    schedule 01.04.2015

ИМХО, это лучший способ написать свою строку:

private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper =
        new HashMap<Class<? extends Persistent>, PersistentHelper>();

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

person Colin Hebert    schedule 16.09.2010
comment
Строка может начинаться с оператора, но никогда не должна им заканчиваться, в данном случае =. Проверьте автоформатирование в вашей IDE. NetBeans наверняка изменит этот код (проверено). - person Hermes; 07.08.2013
comment
Параметры IDE по умолчанию не относятся к личным предпочтениям или рекомендациям разработчика. Я понимаю, что некоторые люди предпочли бы использовать = в начале строки, но в случае объявления атрибутов класса (или атрибутов вообще в этом отношении) я считаю, что код уже достаточно ясен (отступ вторая строка должна сделать это еще более ясным). - person Colin Hebert; 07.08.2013
comment
Просто для ясности, здесь нет правильного и неправильного, это чисто эстетика и личное мнение. - person Colin Hebert; 07.08.2013
comment
Я бы предпочел следовать одному и тому же правилу для всех операторов, если это возможно, и когда вы думаете о таких операторах, как +, - и т. д., очевидно, что более читабельно разрывать строку перед ними — так же, как если бы вы суммировали значения на лист бумаги. Я считаю, что именно поэтому этот подход широко используется. Я упомянул IDE NetBeans как пример, а не как оракул (каламбур не был задуман). Я согласен с тем, что у каждого могут быть свои предпочтения, но здравый смысл в том, что кому-то следует отдать предпочтение, и я считаю, что именно поэтому мы говорим об этом с самого начала. - person Hermes; 04.09.2015

Использует статические фабричные методы Guava для карт и имеет длину всего 105 символов.

private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper = Maps.newHashMap();
person whiskeysierra    schedule 16.09.2010
comment
+1 Очень хорошая идея. Если вам не нужна дополнительная зависимость, очень легко написать такую ​​статическую фабрику самостоятельно. - person helpermethod; 16.09.2010
comment
Я не думаю, что использование библиотеки для получения более коротких строк - хорошая идея. - person Carlos; 16.09.2010
comment
Я бы не рекомендовал включать его для этой цели, но многие проекты уже используют его. И, как указал Helper Method, это один лайнер, который сохраняет некоторые нажатия клавиш. - person whiskeysierra; 17.09.2010
comment
Интересная идея, очевидно, что этот метод был введен именно для этой задачи. - person corsiKa; 17.09.2010
comment
Вы не должны использовать библиотеки Google Guava только для статических фабричных методов. Вы должны использовать Guava, потому что это действительно повысит качество вашего Java-кода во множестве других аспектов. (Не говоря уже о том, что он пуленепробиваемый из-за того количества времени, которое Google потратил на него...) - person C0M37; 06.03.2013

Я думаю, что перемещение последнего оператора в начало следующей строки является хорошей практикой. Таким образом, вы сразу узнаете назначение второй строки, даже если она не начинается с оператора. Я также рекомендую 2 отступа (2 вкладки) для ранее сломанной вкладки, чтобы отличать ее от обычного отступа. Это сразу видно как продолжение предыдущей строки. Поэтому я предлагаю следующее:

private static final Map<Class<? extends Persistent>, PersistentHelper> class2helper 
            = new HashMap<Class<? extends Persistent>, PersistentHelper>();
person Saša    schedule 01.12.2016