Использование запятой для предотвращения необходимости в скобках - PullRequest
2 голосов
/ 03 октября 2010

Иногда, когда у меня есть мульти-регистр if или очень простой for только с двумя утверждениями, я отказываюсь от скобок, вместо этого используя запятую. Это плохая эксплуатация функции, и это уродливо и плохо? Или это приемлемый способ сэкономить время и пространство?

Например:

if (something)
    b = y, c = z--;

вместо:

if (something) {
    b = y;
    c = z--;
}

Ответы [ 7 ]

12 голосов
/ 03 октября 2010

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

Лично я стараюсь сохранять как минимум двусмысленность 1004 * при кодировании, поэтому я всегдавключи { и } во все мои if заявления.Это может сэкономить время, но я предпочитаю ясность : он не ускоряет или не замедляет выполнение кода.

8 голосов
/ 03 октября 2010

Я бы проголосовал против этого по нескольким причинам:

  • Трудно сразу увидеть, одним взглядом, что существует более одного назначения.
  • Яв пользу всегда вставлять фигурные скобки, потому что бывают моменты, когда удобно возвращаться назад, например, во время отладки, и добавлять код, который также выполняется в этом блоке.Компилятор собирается выложить тот же код.Это не сэкономит вам заметное время компиляции.При распространении файла он не будет значительно лучше сжиматься.
5 голосов
/ 03 октября 2010
  • Это не сэкономит больше, чем несколько секунд ввода текста.

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

  • Это не имеет значения для создаваемого объектного кода.Следовательно, это не влияет на время выполнения.

  • Сложнее переходить через операторы компонентов выражения запятой в отладчике.

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

4 голосов
/ 03 октября 2010

Я считаю это очень хорошим стилем, но я уверен, что другие не согласятся.

Один конкретный вариант использования оператора запятой находится внутри частей оператора for, например:

for (i=0, j=1; i<j; i++, j++) { ... }

3 голосов
/ 03 октября 2010

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

#define MY_ASSERT(expr) ((expr) || (debugbreak(), 0))

Здесь debugbreak() возвращает void, но мы все еще хотим иметь 0 в качестве значения.

2 голосов
/ 03 октября 2010

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

Как насчет

  a = b, c;

или

  a = b, c ? d, e : f, g;

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

Мы ожидаем, что кто-то, читающий исходный код, сосредоточится на логике кода, а не на его синтаксисе.

1 голос
/ 03 октября 2010

Я никогда не использовал синтаксис запятой. Но это потому, что я не знал, что он существует, если честно.

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

Так что, на мой взгляд, пользуйтесь по желанию! Пока вы не совершите эту классическую ошибку:

if (cond)
  doSomething();
  doSomethingElse();  // <-- oops, unconditional statement!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...