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