Почему вы не объявляете несколько переменных одного типа в одной строке? - PullRequest
15 голосов
/ 19 сентября 2008

Почему плохая практика объявлять переменные в одной строке?

, например

private String var1, var2, var3

вместо:

private String var1;
private String var2;
private String var3;

Ответы [ 16 ]

20 голосов
/ 19 сентября 2008

По моему мнению, главная цель размещения каждой переменной в отдельной строке - облегчить работу инструментов контроля версий.

Если несколько переменных находятся в одной строке, вы рискуете столкнуться с конфликтами для несвязанных модификаций разных разработчиков.

18 голосов
/ 19 сентября 2008

В C ++:

int * i, j;

i имеет тип int *, j имеет тип int. Слишком легко пропустить различие.

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

9 голосов
/ 19 сентября 2008

В C / C ++ также возникает проблема, заключающаяся в том, что *, используемый для указания типа указателя, применяется только к непосредственно следующему идентификатору. Так что довольно распространенная ошибка неопытных разработчиков - написать

int* var1, var2, var3;

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

int* var1;
int var2;
int var3;

создание только var1 указателя.

9 голосов
/ 19 сентября 2008

Я думаю, что есть разные причины, но все они сводятся к тому, что первая просто менее читаема и более подвержена ошибкам, потому что одна строка делает больше, чем одну вещь.

И все это без реальной выгоды, и не говорите мне, что вы нашли две строки сэкономленного пространства, это реальная выгода.

Это похоже на то, что происходит, когда у вас есть

if ((foo = some_function()) == 0) {
    //do something
}

Конечно, этот пример намного хуже вашего.

6 голосов
/ 19 сентября 2008

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

5 голосов
/ 19 сентября 2008

Почему это плохая практика? Я так не думаю, пока ваш код все еще читабелен.

//not much use
int i, j, k;

//better
int counter, 
    childCounter, 
    percentComplete;
5 голосов
/ 19 сентября 2008

Поскольку в некоторых языках var2 и var3 в вашем примере не будут строками, они будут вариантами (нетипизированными).

4 голосов
/ 19 сентября 2008

Актуальность.

То, что две переменные имеют тип String, не означает, что они тесно связаны друг с другом.

Если две (или более) переменные тесно связаны по функции, а не по типу переменной, то, возможно, они могут быть объявлены вместе. то есть, только если читателю вашей программы имеет смысл видеть две переменные вместе, если они на самом деле помещены вместе

4 голосов
/ 19 сентября 2008

Если честно, я не против. Я думаю, что вполне возможно сгруппировать аналогичные переменные в одну строку, например

float fMin, fMax;

однако я держусь подальше, когда переменные не связаны, например

int iBalance, iColor;

3 голосов
/ 19 сентября 2008

Вот мои причины:

  • Удобочитаемость, ее легче заметить, если вы знаете, что в каждой строке есть только один
  • Контроль версий, меньше внутристрочных изменений, больше однострочных добавлений, изменений или удалений, легче объединять из одной ветви в другую
...