Делает ли две вещи на одной линии всегда плохую практику?

int *itPins = pins;
for(int i = 0; i < count; i++)
{
    ConfigureGpifPinAsGpioOutput(itPins);
    itPins++;
}

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

  • Является ли этот код менее подверженным ошибкам, чем если внутри вызова функции находится ++?
  • Почему?
  • Применяется ли это правило к таким сверхпростым случаям или имеет смысл только для более сложных структур программ?
6 голосов | спросил Vorac 13 FriEurope/Moscow2013-12-13T13:02:05+04:00Europe/Moscow12bEurope/MoscowFri, 13 Dec 2013 13:02:05 +0400 2013, 13:02:05

2 ответа


8

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

 ConfigureGpifPinAsGpioOutput(itPins++);

является very идиоматическим для большинства программистов с некоторым опытом работы в семействах языков программирования C. Имея некоторый опыт в чтении кода C, IMHO так же легко понять, как две строки кода в вашем примере.

Поэтому я бы не стал слишком придирчивым к этому особому делу.

ответил Doc Brown 13 FriEurope/Moscow2013-12-13T15:29:31+04:00Europe/Moscow12bEurope/MoscowFri, 13 Dec 2013 15:29:31 +0400 2013, 15:29:31
2

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

В вашем конкретном примере лучшим ответом является устранение i и непосредственно итерация по номерам контактов:

for(int* p = pins; p < pins + count; ++p) {
    ConfigureGpifPinAsGpioOutput(p);
}

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

ответил kevin cline 13 FriEurope/Moscow2013-12-13T22:33:21+04:00Europe/Moscow12bEurope/MoscowFri, 13 Dec 2013 22:33:21 +0400 2013, 22:33:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132