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

15
задан Ambo100 10 January 2016 в 20:32
поделиться

15 ответов

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

И все, что ни для какого реального усиления, и не делают Вас, говорит мне, что Вы находите, что две строки оставленного свободного места являются реальным усилением.

Это - подобная вещь к тому, что происходит, когда Вы имеете

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

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

9
ответ дан 30 November 2019 в 23:49
поделиться

Обычно это для управления версиями и комментирующих причин, обсужденных другими, и я применил бы это в 95% всех случаев. однако существуют обстоятельства, где это действительно имеет смысл, например, если я кодирую графику, и я хочу, чтобы несколько переменных представили координаты текстуры (всегда ссылаемый условно как s и t) затем объявление их как

интервал s, t;//координаты текстуры

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

0
ответ дан 30 November 2019 в 23:49
поделиться

Это - плохая практика главным образом, когда Вы можете и хотеть инициализировать переменные на замедлении. Пример, где это не могло бы быть настолько плохо:

string a,b;
if (Foo())
{
  a = "Something";
  b = "Something else";
}
else
{
  a = "Some other thing";
  b = "Out of examples";
}
0
ответ дан 30 November 2019 в 23:49
поделиться
  1. , чтобы быть более очевидным для Вас при использовании инструментов Version Control (перепетый Michel)
  2. , чтобы быть более читаемым Вам тому, когда у Вас есть самое простое переполнение/потеря значимости или ошибка компиляции и Ваши глаза, не удалось указать, что очевидное
  3. для защиты противоположного (т.е. многовариантное однострочное объявление) имеет меньше профессионалов ("кодируют текстовую вертикальную видимость" быть одиночным элементом)
0
ответ дан 30 November 2019 в 23:49
поделиться

Согласитесь с edg, и также потому что это более читаемо и легко для обслуживания иметь каждую переменную на отдельной строке. Вы сразу видите тип, объем и другие модификаторы и когда Вы изменяете модификатор, он применяется только к переменной, которую Вы хотите - который избегает ошибок.

0
ответ дан 30 November 2019 в 23:49
поделиться

Что относительно случая, такого как:

public static final int NORTH = 0,
                        EAST = 1,
                        SOUTH = 2,
                        WEST = 3;

, который рассматривают плохой практикой также? Я полагал бы, что хорошо, поскольку это противостоит некоторым точкам, ранее сделанным:

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

Так в (хотя вонючий код) пример, есть ли причины, Вы не сделали бы этого?

2
ответ дан 30 November 2019 в 23:49
поделиться

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

  • Удобочитаемость, легче определить, если Вы знаете, существует только один на каждой строке
  • Управление версиями, меньше изменений внутристроки, больше однострочных дополнений, изменений или удалений, легче объединиться от одного ответвления до другого
3
ответ дан 30 November 2019 в 23:49
поделиться

Уместность.

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

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

4
ответ дан 30 November 2019 в 23:49
поделиться

В C++:

int * i, j;

я имею интервал типа *, j имеет интервал типа. Различие слишком легко пропущено.

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

18
ответ дан 30 November 2019 в 23:49
поделиться

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

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

//better
int counter, 
    childCounter, 
    percentComplete;
5
ответ дан 30 November 2019 в 23:49
поделиться

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

5
ответ дан 30 November 2019 в 23:49
поделиться

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

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

20
ответ дан 30 November 2019 в 23:49
поделиться

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

6
ответ дан 30 November 2019 в 23:49
поделиться

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

плавание fMin, fMax;

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

интервал iBalance, iColor;

4
ответ дан 30 November 2019 в 23:49
поделиться

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

int* var1, var2, var3;

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

int* var1;
int var2;
int var3;

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

9
ответ дан 30 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: