<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

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

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Форум сайта MyRusakov.ru

JavaScript: стоит ли избегать стиля написания кода “функция в функции”?
22.01.2017 06:37:58 JavaScript: стоит ли избегать стиля написания кода “функция в функции”? Сообщение #1
SuperSonicFire

SuperSonicFire

Новичок

Новичок

Дата регистрации:
22.06.2016 09:29:52

Сообщений: 2

Допустим, у нас есть JavaScript приложение с большим количеством виджетов. Рассмотрим на примере шапки сайта. Функция `initHeader()` собирает все нужные для дальнейшей работы DOM-объекты внутри шапки, добавляет обработчики событий, вообщем готовит к её использованию. Соответствует ли приведённый ниже шаблон кода "правилам хорошего тона" написания кода?

function initHeader(){
// объекты виджета, с которыми будем работать в функциях
var var1 = $('#div1';
var var2 = $('#div2';
// ...

// вспомогательные функции

function function1(){
  // ...
}

function function2(){
  // ...
}

function function3(){
  // ...
}
}
Особенность этого шаблона в том, что все вспомогательные функции находятся внутри основной. Также: функцию initHeader() мы вызываем только один раз (например после HTML-кода шапки), а вспомогательные фукнции - сколько угодно раз. Пример вспомогательной фукнции - обработка поля "поиск" и кнопки рядом с ним, которые часто располагается именно в шапке. 

Зачем такая структура? Первое и самое главное: операция по выборке DOM-объектов является очень ресурсозатратной; соглано курсу https://myrusakov.ru/reactjs_course.html, библиотека jQuery делает это в порядка 10 раз медленнее нативного JavaScript. Поэтому, такие операции необходимо минимизировать. Если мы напишем все вспомогательные функции вне initHeader(), то тогда придётся либо передавать захваченные, например, фукнцией jQeury() DOM-объекты во вспомогательные функции в виде аргументов, либо захватывать их заново, чего мы и стремимся избежать. В приведённом мной шаблоне все переменные, объявленные в initHeader, будут доступны во всех внутренних функциях.

Почему же не устраивает вариант с передачей аргументов? Согласно книге Роберта Мартина "Чистый код", в идеале у функции не должно быть аргументов вообще, а если аргументы неизбежны, то должен быть один, максимум два аргумента. Но в нашем случае, внутри вспомогательных функций может быть нужно большое количество переменных: это и jQuery-объекты, какие-то константы, рабочие переменные наподобие времени анимации, какие-то введённые данные и так далее. Если написать все вспомогательные функции вне основной, то тогда придётся всё это передавать в виде аргументов, и в два аргумента уложиться едва ли получится. Такая структура, которую я показал, избавляет нас от необходимости передавать аргументы.

Приведите, пожалуйста, аргументы за и/или против такого подхода.
Профиль