Подтвердить что ты не робот

Читаемость a = b = c или = c; B = C;?

У меня есть класс, который имеет группу целых чисел, скажем

foo()
{
  int a;
  int b;
  int c;
  int d;
  ....
  string s;
}

Теперь возникает вопрос о наилучшей читаемости, функции init() для foo(), если она выглядит как

void init()
{
  a=b=c=d=1; //for some reason they are init to 1;
  s = "abc";
}

или

void init()
{
  a=1;
  b=1;
  c=1;
  d=1;
  s = "abc";
}

?

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

EDIT: прежде чем этот вопрос зайдет слишком далеко, намерение этого вопроса было простым: В Эффективном элементе С++ 12 (предпочитайте инициализацию присвоения в конструкторах), Скотт использует назначение цепочки вместо a = c; B = C; Я уверен, что он знает, когда использовать что, но я также помнил, что книги, которые я читал, также рекомендовали использовать int a; int b; который в аналогичном случае назначений. В моей программе у меня аналогичная ситуация, когда группа связанных отдельных типов встроенных типов должна быть инициализирована, и я обнаружил, что создание цепочки присваивания делает ее более удобной для чтения, особенно если у класса есть много других переменных экземпляров экземпляров. Кажется, это противоречит книгам, которые я читал, и моей памяти, следовательно, вопрос.

4b9b3361

Ответ 1

Мои личные предпочтения a=b=c=d по следующим причинам:

  • Это краткий, сохраняет строки
  • Он передает концепцию, что (a/b/c/d) инициализируются одним и тем же, что они связаны

Однако предостережение:

  • Не делайте этого, если a/b/c/d не связаны (и просто происходит инициализация 1). Вы уменьшите читабельность своего кода. Пример:

    a=c=1; // Foo-function related

    b=d=1; // Bar-function related

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

Тем не менее, моя личная рекомендация заключается в цепочке присвоений переменных, которые связаны с концепцией/использованием. На практике практика изменения назначения обычно не возникает часто, поэтому оговорка № 2 обычно не должна представлять проблемы.

Изменить: Моя рекомендация может противоречить опубликованным рекомендациям. См. Комментарии.

Ответ 2

Я предпочитаю прикованную версию, но это все зависит от предпочтений.

Обратите внимание, однако, что

a = b = c = 0;

эквивалентно:

c = 0;
b = c;
a = b;

а не

a = 0;
b = 0;
c = 0;

(не то, что для вас должно быть важно, какое назначение происходит первым)

Ответ 3

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

Однако Oracle "Условные обозначения кода для языка программирования Java TM" четко говорит о том, что для использования отдельных операторов присваивания:

10.4 Назначения переменных. "Избегайте назначения нескольких переменных одному значению в одном выражении. Его трудно прочитать".

Мое мнение?

  • Следуйте своим предписанным/согласованным правилам стиля, даже если вам это не нравится 1.
  • Если в вашем проекте нет (пока) предписанных/согласованных правил стиля:
    • Попробуйте убедить других членов принять наиболее широко используемые применимые правила стиля.
    • Если вы не можете убедить их/прийти к консенсусу, просто сделайте это неофициально для основных фрагментов кода, которые вы пишете для проекта 1.

1... или выйти.