стиль программирования: когда добавить переменную? - PullRequest
1 голос
/ 29 августа 2011

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

Я переосмыслил некоторые базовые идеи, и это одна - когда уместно добавить переменную против объединения / использования существующих переменных по мере необходимости?

Очевидно, что если есть промежуточное значение, которое необходимо повторно использовать, это будет хорошей причиной для добавления переменной. Однако, когда я добавляю переменные для удобства чтения, выбор не так очевиден. Например, в C ++ у меня может быть переменная, которая выглядит следующим образом:

std::vector<std::map<char, float> > frequencies;

Если я перебираю это, я могу получить доступ к таким вещам, как:

x = frequencies[i]['c']

Я также могу ввести временную переменную:

std::map<char, float> curr_freq = frequencies[i];
x = curr_freq['c'];

Это довольно простой случай, но вы можете представить себе более сложные вложенные структуры. Я считаю, что у меня нет принципиальной основы для выбора того или иного, когда вещи начинают казаться слишком нечитаемыми, я добавлю переменные, в противном случае нет, и, поскольку у меня нет основы для этих решений, мой код, вероятно, не выглядит очень последовательным Есть ли более принципиальная основа для решения, когда уместно добавить переменную?

Ответы [ 4 ]

2 голосов
/ 29 августа 2011

Я предпочитаю несколько ПРОСТЫХ линий вместо одной СЛОЖНОЙ.

1 голос
/ 29 августа 2011

В вашем конкретном случае строка:

std::map<char, float> curr_freq = frequencies[i];

Фактически создаст новый map объект, скопировав map, хранящийся в frequencies[i]. Поскольку вы хотите индексировать только свой контейнер, все это дополнительное копирование представляется расточительным.

Если вы хотите ввести временную переменную (чтобы сделать код более читабельным и т. Д.), Но не хотите создавать дополнительные накладные расходы, вы можете просто получить указатель / ссылку в вашей структуре данных:

std::map<char, float> &curr_freq = frequencies[i]; // grab reference, not a copy
float x = curr_freq['c'];

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

Надеюсь, это поможет.

0 голосов
/ 29 августа 2011

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

в C вам нужно определить переменные в верхней части функции, поэтому я постараюсь свести ее к минимуму.

в java / php, это зависит от того, как я выполняю итерацию - foreach ($ items как $ i) или foreach ($ items как $ k => $ v) или foreach (Object o: objectsArray) все создадут локальные переменные для вас, где для ($ i = 0, $ n = count ($ items); $ i

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

0 голосов
/ 29 августа 2011

То, что когда-либо повышает читабельность кода, - это то, что вы должны делать.

Другие могут нуждаться в поддержке вашего кода.

И, что более важно, ВАМ может потребоваться поддерживать ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...