Конвенция для переноса строк кода? - PullRequest
3 голосов
/ 03 февраля 2010

Обычно я оборачиваю строки кода так, чтобы они были длиной до 80 символов.

Какая упаковка выглядит лучше?

// (A)
std::vector<MyLongClassName::size_type>* myvector
    = new std::vector<MyLongClassName::size_type>();
bool isOneOrAnother = hereIsOneLongCondition
    && hereIsAnotherOne;

// (B)
std::vector<MyLongClassName::size_type>* myvector =
    new std::vector<MyLongClassName::size_type>();
bool isOneOrAnother = hereIsOneLongCondition &&
    hereIsAnotherOne;

Я знаю, что это произвольно, но есть ли соглашение или предпочтительный способ?

Ответы [ 5 ]

2 голосов
/ 03 февраля 2010

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

bool isOneOrAnother = ( hereIsOneLongCondition &&
                        hereIsAnotherOne );
1 голос
/ 03 февраля 2010

Другая возможность для 2-го утверждения (иногда):

bool isOneOrAnother =
   hereIsOneLongCondition && hereIsAnotherOne;
0 голосов
/ 03 февраля 2010

Я второй ответ Грэма Перроу. В некоторых случаях, когда у меня есть что-то вроде

bool someCondition = ( hereIsOneLongCondition &&
                       hereIsAnotherOne &&
                       hereIsYetAnother &&
                       ohNoHereIsMore);

Вместо этого я склоняюсь к выражению в функции:

bool someCondition = Foo();

, преимущество которого заключается в возможности более простого редактирования Foo () - я могу комментировать отдельные строки:

bool Foo()
{

   bool result = true;

   if (!hereIsOneLongCondition)
   {
      result = false;
   }

   if (!hereIsAnotherOne)
   {
      // this was added to fix such-and-such bug
      result = false;
   }

   // etc

   return result;
}

Выше я сказал кое-что , поскольку это не всегда возможно, и это производит больше строк кода. Однако обнаружить ошибки и рефакторинг проще.

0 голосов
/ 03 февраля 2010

Я еще один, кто предпочитает (B), но для второго утверждения я предпочитаю:

bool isOneOrAnother =
         hereIsOneLongCondition &&
         hereIsAnotherOne;

Причина, по которой предпочтение (B) заключается в том, что он используется в синтаксисе вставки точек с запятой <cough> broken </cough> в JavaScript.Поскольку я часто работаю в многоязычной среде, для меня плохо приобретать привычки, которые нарушают один из языков, которые я использую.

0 голосов
/ 03 февраля 2010

Я лично имею в виду поставить любого оператора в конце строки. Я полагаю, что Microsoft также рекомендует эту практику, хотя я не могу найти страницу в данный момент. Руководство по стилю C # здесь рекомендует то же самое ...

Когда выражение не помещается на одна строка, разбить его в соответствии с эти общие принципы:
# Перерыв после запятой.
# Перерыв после оператора.
# Предпочитайте перерывы более высокого уровня перерывам более низкого уровня.
# Совместите новую строку с началом выражения на тот же уровень на предыдущей строке.

Судя по всему, большая часть кода, который я прочитал, тоже следует этому правилу. Если вы ищете обоснование этому, единственное, что я могу действительно предложить, это то, что не имеет смысла начинать строку с оператора, потому что вы эффективно начинаете новое (под) выражение и, таким образом, делаете это легче разделить мысленно. Кроме того, если кто-то читает код построчно, легче заметить продолжение строки, если в конце текущей строки есть оператор зависания, а не начало следующей строки.

Надеюсь, это поможет.

...