В чем преимущество такого своеобразного форматирования?

Я видел, что этот формат используется для списков с разделителями-запятыми в некотором коде C++ (хотя это может относиться к любому языку):

void function(  int a
              , int b
              , int c
             )

Мне было интересно, зачем кому-то использовать это в более распространенном формате, таком как:

void function (int a,
               int b,
               int c
              )
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
488
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Проще добавить параметр в конце, начиная с дублирования предыдущего параметра (строки).

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

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

и учитывая, насколько легко в сегодняшних идеях дублировать последнюю строку, это может быть жемчужиной. (netbeans ctrl + shift + вниз)

Midhat 23.10.2008 22:46

Злоба?

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

Я знаю, когда я оборачиваю и в sql или в операторе if, я пытаюсь убедиться, что и является началом следующей строки.

Если A и B
и C

Я думаю, это проясняет, что C по-прежнему является частью if. Первый формат, который вы покажете, может быть таким. Но, как и в случае с большинством вопросов о стиле, все просто: если команда выбирает один стиль, то его следует придерживаться.

Мне кажется, это личный выбор.

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

std::cout << "some info "
    << "some more info " << 4
    + 5 << std::endl;

(Обратите внимание, в этом случае разбивать 4 + 5 глупо, но если у вас сложная математическая инструкция, это может быть необходимо).

Я часто использую это, особенно когда имею дело с условными выражениями, такими как операторы if, for и while. Потому что в однострочных условных выражениях также часто опускаются фигурные скобки.

 std::vector<int> v = ...;
 std::vector<int> w = ...;
 for (std::vector<int>::iterator i = v.begin()
       , std::vector<int>::iterator j = w.begin()
       ; i != v.end() && j != w.end()
       ; ++i, ++j)
           std::cout << *i + *j << std::endl;
Ответ принят как подходящий

Это довольно распространенный стиль кодирования при написании операторов SQL:

SELECT field1
     , field2
     , field3
--   , field4
     , field5
FROM tablename

Преимущества:

  • Позволяет легко добавлять, удалять или изменять порядок полей, не беспокоясь о последней конечной запятой.
  • Позволяет легко закомментировать строку (TSQL использует "-"), не нарушая остальную часть оператора.

Я бы не подумал, что вы захотите менять порядок параметров в функции так же часто, как в SQL, так что, возможно, это просто чья-то привычка.

Возможность прокомментировать один из них будет зависеть от конкретного используемого языка. Не уверен в C++. Я знаю, что VB.Net этого не допустит, но это потому, что для разделения операторов по строкам требуется символ продолжения (_).

Второй бит применяется к любому языку, имеющему маркер «комментарий до конца строки». Сюда входят C++, C#, Java, JavaScript, VB и т. д. И т. Д.

AaronSieb 23.10.2008 22:44

... любой язык, который не может терпеть висящую букву ',' в конце списка

Javier 23.10.2008 22:48

Что ж, VB и VB.Net не позволят вам произвольно разбивать операторы на несколько строк, поэтому этот метод там не сработает.

BradC 23.10.2008 22:54

Нет причин, я подозреваю, это просто вопрос личных предпочтений.

Лично я предпочитаю второй.

void function (int a,
               int b,
               int c
              )

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

На самом деле не стоит делать это так уродливо, если вы спросите меня.

The only benefit I would see, is when you add a parameter, you just have to copy and paste the last line, saving you the extra couple key strokes of editing comma position and such.

То же самое происходит, если вы удаляете последний параметр.

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

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

function(
          int a,
          int b,
//          int c,
          int d
        )

Вы можете сказать, что не можете сделать это с последним параметром, и будете правы, но с другой формой вы не можете сделать это с первым параметром:

function (
//             int a
           , int b
           , int c
           , int d
          )

Таким образом, компромисс между возможностью закомментировать первый параметр и возможностью закомментировать последний параметр + возможность добавлять новые параметры без добавления запятой к предыдущему последнему параметру.

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

supercat 27.12.2011 03:08

Другие вопросы по теме