Читаемость 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; который в аналогичном случае назначений. В моей программе у меня аналогичная ситуация, когда группа связанных отдельных типов встроенных типов должна быть инициализирована, и я обнаружил, что создание цепочки присваивания делает ее более удобной для чтения, особенно если у класса есть много других переменных экземпляров экземпляров. Кажется, это противоречит книгам, которые я читал, и моей памяти, следовательно, вопрос.
Ответы
Ответ 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... или выйти.