четверг, 14 января 2016 г.

Глава 10. Общие принципы использования переменных

Неявное объявление переменных - зло, если оно присутствует в вашем языке, то нужно быть предельно внимательным и не забывать явно инициализировать переменные. 

Частая причина ошибок - неверная инициализация данных. Переменные могут не быть проинициализированы, или их значение уже поменялось с момента инициализации, или это сложная структура данных и не все её поля были инициализированы. Переменные нужно инициализировать при её объявлении, если в языке это сделать невозможно, то нужно инициализировать её как можно ближе к моменту её первичного использования. 

По мере возможности объявляем переменные как final или const. Когда нужно, чтобы переменная меняла значение - убираем эти спецификаторы. Нужно инициализировать данные-члены класса в его конструкторе. Также необходимо следить за повторной инициализацией - иногда переменную нужно инициализировать два или большее количество раз. Всегда нужно обращать внимание на предупреждения компилятора. 

Интервал - среднее расстояние в количестве строк между обращениями к переменной. Интервал должен быть как можно меньше, тогда нам будет легче сконцентрироваться на смысле хранимой в переменной информации => программу легче читать.
Время жизни - количество строк между созданием и последним использованием переменной. Для него полностью справедливо предыдущее утверждение.
Общие советы по минимизации области видимости переменной:
  • Инициализировать переменные, используемые в цикле, непосредственно перед циклом, а не в начале метода, содержащего цикл 
  • Не присваивать переменной значения вплоть до его использования
  • Группировать связанные команды
  • Разбивать группы связанных команд на отдельные методы
  • Начинать с самой ограниченной области видимости и расширять её только при крайней необходимости

Время связывания - момент, когда переменная и её значение связываются вместе. Например:
  • При написании кода - захардкоженные значения
  • Во время компиляции - через константы или макросы
  • В период выполнения - при загрузке программы(из реестра, файла и т.д.), при создании объекта, по требованию(например при каждой перерисовке окна)
Чем раньше время связывания, тем ниже гибкость, но и тем ниже сложность программы. Так что в этом деле важен баланс.

Виды данных по типу управления ими:
  • Последовательные - нужно несколько последовательных команд, чтобы их все обработать
  • Селективные - обрабатываются либо одни, либо другие данные(управление с помощью if-else)
  • Итеративные - обрабатываются при помощи перебора

Каждую переменную нужно использовать только с одной целью - так же, как и с методами. Также нужно избавляться от их противоположности - переменных, которые нигде не используются.

Комментариев нет:

Отправить комментарий