Вы когда-нибудь смотрели в зеркало, которое стоит напротив другого зеркала? Там бесконечная глубина - отражение отражения отражения. Вот это и есть рекурсия. Только в программировании мы обычно не хотим бесконечности (иначе сервер упадет). Мы хотим, чтобы функция углублялась ровно столько раз, сколько нужно, а потом аккуратно возвращалась обратно - как матрешка, которая раскрывается до последней куклы, а затем собирается снова. Прежде чем писать код, ответьте себе на три вопроса (они спасут от stack overflow): Если эти три пункта есть - рекурсия безопасна...
ovnoCod
Big O нотация на пальцах: Почему ваш код — это велосипед, а не ракета
Big O нотация на пальцах: Почему ваш код - это велосипед, а не ракета Представьте, что вы пришли на кухню. Вам нужно пожарить 10 котлет. На сковороду влезает только 2 штуки, а время жарки одной стороны - 5 минут. Как бы вы ни крутили, вы потратите одно и то же время. А теперь представьте, что котлет 1000. Или миллион. Вот тут-то и появляется главный вопрос программиста: Как изменится время работы, если данных станет сильно больше? Этот вопрос и решает Big O нотация (читается «О большое»). Это не магия, это просто способ сказать: «Слушай, когда у меня будет миллион пользователей, этот код ляжет...
Язык JavaScript - Флаги и дескрипторы свойств
Вы думаете, что свойство объекта - это просто пара "ключ-значение"? Что ж, это только верхушка айсберга. Под поверхностью скрывается целый мир: флаги, которые определяют, можно ли свойство изменять, перечислять или удалять. Дескрипторы, которые позволяют создавать вычисляемые свойства с геттерами и сеттерами. В JavaScript каждое свойство объекта - это не просто значение. Это структура с тремя скрытыми флагами и, возможно, функциями доступа. Понимание этой системы открывает двери к продвинутому метапрограммированию, созданию неизменяемых объектов и тонкому контролю над API...
Язык JavaScript - Повторяем стрелочные функции
Когда в 2015 году в JavaScript появились стрелочные функции, многие вздохнули с облегчением. Наконец-то можно писать короткие колбэки без function и return. Наконец-то this перестал быть проклятием. Наконец-то код стал красивее. Но, как у любой суперсилы, у стрелочных функций есть тёмная сторона. Они не везде подходят. Они ведут себя иначе. И если не понять эти различия, стрелка может выстрелить мимо цели. Сегодня мы повторим всё, что нужно знать о стрелочных функциях: от синтаксиса до подводных камней, от идеальных сценариев до тех мест, где они категорически не подходят...
Язык JavaScript - Привязка контекста к функции
Вы когда-нибудь теряли ключи в собственной квартире? Вроде только что держали в руках, а через секунду - исчезли. И вы ходите, ищете, а они лежат на самом видном месте, просто вы смотрели не туда. С this в JavaScript та же история. Вы только что им пользовались, всё работало. А потом передали метод в колбэк - и this потерялся. И вы ищете, отлаживаете, добавляете console.log, а проблема в том, что функция забыла, кому она принадлежит. Сегодня мы разберёмся, почему this теряется, как его привязать намертво и какие есть способы зафиксировать контекст...
Язык JavaScript - Декораторы и переадресация вызова, call/apply
Представьте, что у вас есть функция. Она делает своё дело. Но вам нужно добавить логирование. Или кэширование. Или проверку прав доступа. Или замер времени выполнения. Вы можете переписать функцию, добавив туда новый код. Но что, если функций много? Что, если вы не можете менять оригинал? Что, если вам нужно применить одно и то же улучшение к разным функциям? Встречайте декораторы - мощный паттерн, который позволяет оборачивать функции, добавляя им новое поведение без изменения исходного кода. А...
