Я думаю, что существуют различные причины, но они все сводятся, к которому первое просто менее читаемо и более подвержено отказу, потому что одна строка делает больше чем одну вещь.
И все, что ни для какого реального усиления, и не делают Вас, говорит мне, что Вы находите, что две строки оставленного свободного места являются реальным усилением.
Это - подобная вещь к тому, что происходит, когда Вы имеете
if ((foo = some_function()) == 0) {
//do something
}
, Конечно, этот пример намного хуже, чем Ваш.
Обычно это для управления версиями и комментирующих причин, обсужденных другими, и я применил бы это в 95% всех случаев. однако существуют обстоятельства, где это действительно имеет смысл, например, если я кодирую графику, и я хочу, чтобы несколько переменных представили координаты текстуры (всегда ссылаемый условно как s и t) затем объявление их как
интервал s, t;//координаты текстуры
, по моему скромному мнению, улучшают удобочитаемость кода и путем сокращения кода и путем создания этого явным, что эти две переменные принадлежат вместе (конечно, некоторые привели бы доводы в пользу использования единственной переменной класса точки в этом случае).
Это - плохая практика главным образом, когда Вы можете и хотеть инициализировать переменные на замедлении. Пример, где это не могло бы быть настолько плохо:
string a,b;
if (Foo())
{
a = "Something";
b = "Something else";
}
else
{
a = "Some other thing";
b = "Out of examples";
}
Согласитесь с edg, и также потому что это более читаемо и легко для обслуживания иметь каждую переменную на отдельной строке. Вы сразу видите тип, объем и другие модификаторы и когда Вы изменяете модификатор, он применяется только к переменной, которую Вы хотите - который избегает ошибок.
Что относительно случая, такого как:
public static final int NORTH = 0,
EAST = 1,
SOUTH = 2,
WEST = 3;
, который рассматривают плохой практикой также? Я полагал бы, что хорошо, поскольку это противостоит некоторым точкам, ранее сделанным:
Так в (хотя вонючий код) пример, есть ли причины, Вы не сделали бы этого?
Вот мои причины:
Уместность.
Просто, потому что две переменные имеют Строку типа, не означает, что они тесно связаны друг с другом.
, Если два (или больше) переменные тесно связаны функцией, скорее затем типом переменной, то, возможно, они могли быть объявлены вместе. т.е. только если имеет смысл для читателя Вашей программы видеть, что эти две переменные вместе должны они на самом деле быть помещенными вместе
В C++:
int * i, j;
я имею интервал типа *, j имеет интервал типа. Различие слишком легко пропущено.
Помимо наличия их на одной строке каждый помогает добавить некоторые комментарии позже
Почему та плохая практика? Я не думаю, что это, пока Ваш код все еще читаем.
//not much use
int i, j, k;
//better
int counter,
childCounter,
percentComplete;
Поскольку на некоторых языках, var2 и var3 в Вашем примере был бы не быть строками, они будут (невведенными) вариантами.
По-моему, главная цель наличия каждой переменной на отдельной строке состояла бы в том, чтобы упростить задание инструментов Version Control.
, Если несколько переменных находятся на той же строке, Вы рискуете иметь конфликты для несвязанных модификаций различными разработчиками.
С отдельными строками у Вас есть возможность добавить комментарий к каждой строке, описывающей использование переменной (если это не ясно из своего имени).
Чтобы быть честным, я не против него. Я думаю что его совершенно выполнимое группировать подобные переменные на той же строке, например,
плавание fMin, fMax;
однако я держусь подальше, когда переменные не связаны, например,
интервал iBalance, iColor;
В C/C++ у Вас также есть проблема, которая * раньше указывала, что тип указателя только относится непосредственно после идентификатора. Таким образом, довольно частая ошибка неопытных разработчиков состоит в том, чтобы записать
int* var1, var2, var3;
и ожидание, что все три переменные типа 'международный указатель', тогда как для компилятора это читает как
int* var1;
int var2;
int var3;
создание только var1 указатель.