Брутально и бессердечно о программировании и проектировании
ГлавнаяФорумПаттерныАнтипаттерныТест-драйвЗаметкиВопрос-ответКнигорецензииСправочная

40. Локальные переменные

Еще один признак хорошего кода, это малое количество локальных переменных в функциях. Чем меньше — тем лучше. Хорошая функция, помимо всего прочего, это одна-две, максимум — три локальные переменные.
Логика рассуждений здесь очень проста. Локальные переменные это контекст. Контекст, образованный локальными переменными, всегда одноразовый. Много локальных переменных — сложный контекст. Сложный контекст не должен быть одноразовый. Сложный одноразовый контекст — прямой путь к code-driven development. Сложный контекст лучше всего посадить в класс: с одной стороны это придаст дополнительную строгость, с другой — дополнительную гибкость, с третьей — этот класс может пригодиться кому-то еще, а это значит, что контекст будет спасен от одноразовости.
Большое количество локальных переменных также может представлять собой помесь нескольких контекстов. Это означает, что функция пытается решать сразу несколько задач. В этом, очевидно, тоже нет ничего хорошего.
На практике большое количество локальных переменных обычно встречается в очень больших функциях. Если функция имеет пятнадцать локальных переменных, то, скорее всего, она состоит минимум из ста пятидесяти строк.
Если в вашей функции много локальных переменных, то это означает одно из двух: либо вы не завершили декомпозицию (ваша функция решает сразу несколько задач), и вашу функцию нужно разбить на несколько функций с небольшим количеством локальных переменных, либо контекст вашей функции достаточно сложен и заслуживает того, чтобы его выделили в самостоятельную языковую сущность.
Вот примеры локальных переменных хорошей функции: переменная цикла (итератор, лямбда-параметр); возвращаемое значение, требующее предварительной проверки; объект, собранный из переданных функции параметров; объект-контекст. Если в ваших локальных переменных начинает просматриваться какое-то родство, какая-то «сюжетная линия», то это означает что вы сошли с верного пути — пора остановиться и провести работу над ошибками.
Что значит «выделить контекст в отдельную языковую сущность»? Это ни в коем случае не означает «запихнуть все локальные переменные в новый класс». Действовать, естественно, нужно с умом. Часть локальных переменных может уйти в данные-члены уже существующих классов, часть, в действительности, может и вообще не понадобиться. Оставшиеся переменные, если они претендуют на образование новой языковой сущности, должны образовывать некую осмысленную и законченную сущность. Это ни в коем случае не должна быть пестрая свалка разрозненных элементов.
Вообще говоря, назначение практически любой функции состоит (должно состоять) в том, чтобы обеспечить взаимодействие некоторых языковых сущностей (например, объектов каких-то классов). Если для обеспечения такого взаимодействия вам требуется десять дополнительных переменных, то, скорее всего это говорит о том, что взаимодействующие сущности не достаточно полны и не достаточно самостоятельны и независимы. Скорее всего часть этих локальных переменных в таком случае это как раз то, чего не хватает вашим классам для того, чтобы стать полными (законченными), самостоятельными и независимыми. Опять же, это совершенно не означает то, что нужно взять и тупо перенести часть переменных в какие-то классы. Действовать, как я уже сказал, нужно с умом.

Оглавление
Статистика
© 2007—2009 Inside C++ Коммерческие услугиКонтактная информация

Реализуем модульные дачные бытовки, блок контейнеры низкие цены. няня - затейница. увлажнитель воздуха venta Рига, увлажнитель воздуха venta Ростов_на_Дону. увлажнитель воздуха. Обязательно страхование автомобилей, автострахование, осаго калькулятор, страхование недвижимости. русское порно. movies download. Word en JPG. садовый инструмент