Go. Прорабатываем 25 основных вопросов собеседования
Go, иначе называемый Golang, является открытым языком программирования, который похож на C, но при этом оптимизирован для более быстрой компиляции, удобной реализации конкурентности и...
Python — идеальный инструмент для любой проблемы
Размышления о моей первой программе на Python.
Размышления это всегда помогающее (а иногда и развлекающее) занятие. Из ностальгических соображений, конечно, если можно испытывать ностальгию по...
Придет ли язык программирования Mojo на смену Python?
Mojo считается крупнейшим из последних достижений в сфере разработки языков программирования. Высказываются даже предположения, что Mojo станет заменой Python. Каковы же на самом деле шансы Mojo стать новым Python?
Как легко и надежно реализовать модульные тесты на Python
Хотите крепко спать, зная, что ваш код не будет взломан? Обеспечьте себе спокойную жизнь с помощью модульных тестов. Узнайте о том, что такое модульное тестирование, зачем оно применяется и как его реализовать на Python.
Знакомство с фабричным методом
Фабричный метод упрощает процесс создания объектов, делает код более удобным в обслуживании и обеспечивает ряд других преимуществ. Разберем принцип его работы на реальном примере создания игровых персонажей.
Зачем использовать RTK Query для API-вызовов в React
Если для API-вызовов в React-приложениях вы все еще используете Redux, значит, вам пора ознакомиться с более продвинутым инструментом - RTK Query. Он облегчит вашу работу, избавив от необходимости вручную писать логику загрузки и кэширования данных.
Рецензирование кода Flutter: лучшие практики
Рецензирование кода делает его чистым, эффективным и легко сопровождаемым, способным выдержать испытание временем. Поговорим о том, какие изменения необходимы при этом, а какие не имеют смысла.
Пять отличных Python-библиотек для data science
Python — это лучший друг специалистов по данным, а библиотеки значительно упрощают их жизнь. Работая над NLP-проектом, я открыл для себя пять отличных Python-библиотек, которые мне...
Выбираем базу данных
Опытный ли вы инженер-программист или студент, пишущий университетский проект, в какой-то момент вам нужно будет выбрать базу данных для ваших целей.
Если вы ранее уже...
Пространства имен и области видимости в Python
Содержание:
Пространства имен в Python.
Встроенное пространство имен. Глобальное пространство имен.Локальное и объемлющее пространства имен.
Область видимости переменной. Словари пространств имен Python.
Функция globals().Функция locals().
Изменение переменных вне области видимости.
Объявление global.Объявление...
Автоматизация платежей со Stripe и Golang: руководство разработчика
Реализуем интегрируемый в онлайн-платформы функционал автоматической оплаты услуг, создадим сеанс оформления заказа для клиента на Go, Stripe и Gin. Разберемся, как с помощью хуков здесь устраняются основные сложности.
React для начинающих: какие компоненты лучше — классы или функции?
Синтаксис, передача свойств, быстродействие, изменение и хранение состояния в двух разных типах компонентов ReactJS.
Python + Selenium: как получить координаты по адресам
Я составил пошаговое описание решения задачи, как работать с Python и Selenium для сбора данных о координатах (широты и долготы) с карт Google, зная...
Как создать Android-приложение чат-бота с генеративным ИИ Google
Реализуем функционал с каналами, большими языковыми моделями, единым тематическим оформлением компонентов. Настроим параметры генерации контента и интерфейс чата, добавим возможности генерирования текста и формирования рассуждений по фото.
Как усилить электронные таблицы Google возможностями ChatGPT
Предлагаем улучшить электронные таблицы Google с помощью ChatGPT и начать работать с ними по-новому: более качественно, продуктивно и творчески.
Внедрение зависимостей для создания элегантных горизонтальных архитектур
Как не попасть в ловушку вертикальных архитектур? Рассмотрим преимущества горизонтальной структуры с внедрением зависимостей и построим такую.
Раскройте потенциал VS Code для программирования на Ruby
Рассмотрим расширения и библиотеки для повышения продуктивности при работе с кодом на Ruby. Настроим альтернативную RubyMine, бесплатную среду разработки.
Создаем собственную Alexa в 20 строках Python
У всех моих друзей есть Alexa, а у меня нет, из-за чего они надо мной смеются. Натерпевшись вдоволь, я решил: “Хватит!”.
Я связался со своей...
Реализация кэширования новостных тем в приложении TrendNow. Часть 5
В этой части вы узнаете о том, как эффективно реализовать кэширование новостных тем на стороне клиента с использованием базы данных Room. Это может быть полезно для снижения ограничения скорости API, уменьшения нагрузки на сервер, повышения эффективности приложения.
Приключения Java-разработчика, решившегося изучать Go
Мне нравится изучать что-то новое, особенно новые языки. Всегда интересно узнать, как с одной и той же проблемой справляются разные языки и как различается...
Как создать API-шлюз в Rust посредством библиотеки Hyper
Научимся создавать эффективный API-шлюз в Rust, задействуя библиотеку Hyper и YAML-файлы конфигурации. Кроме того, напишем модульные тесты для тестирования логики авторизации и проверим корректную работу API-шлюза.
Бесконечное количество репозиториев Git на Cloudflare Worker с быстрым развертыванием
Авторы Gitlip рассказывают о своем продукте — инструменте совместной разработки в эпоху искусственного интеллекта. Это комплексное сочетание контроля версий на основе Git, совместного написания кода и развертывания в один клик. Цель — упростить практическое применение современных моделей искусственного интеллекта.
Pandas: взгляд изнутри
Рассмотрим структуру данных Pandas: массивы, блоки, BlockManager. Познакомимся с понятием консолидированного датафрейма.
5 востребованных методов программирования на Bash
Рассмотрим 5 популярных приемов работы с кодом интерпретатора команд Bash. Они помогают писать более производительные и легко читаемые скрипты командной оболочки.
Как и для чего использовать нативную библиотеку сериализации Kotlin
Вывод из статьи
В конце статьи вы узнаете, почему команда Kotlin создала новую библиотеку сериализации, несмотря на наличие многих продвинутых решений, таких как Moshi и Gson....
Байт-код Java: назначение, структура и использование
Занимаетесь разработкой компиляторов, современных фреймворков или Java-инструментов? Тогда вам необходимо знать, как что такое байт-код, какова его структура, зачем он нужен и как с ним работать. Эти знания позволят эффективно использовать байт-код Java в своих целях.
Простое руководство по форматированию строк в Python с помощью f-строк
Использование f-строк - 5-го способа форматирования строк, появившегося в Python 3.6, - повысит ваш профессиональный уровень. В отличие от других способов в Python, f-строки являются более гибкими, работают быстрее и улучшают читаемость кода.
Эффективная стратегия тестирования Android-проектов. Часть 1
В этой части описан и обоснован сбалансированный подход к комплексному тестированию Android-приложений, включающий автоматизированные (модульные, интеграционные, сквозные, интерфейсные) и ручные тесты. Такая эффективная стратегия позволяет минимизировать время и усилия, получив максимальную отдачу.
Распознаём 50 видов текста на C++ с Plywood
Посмотрим на скромный текстовый файл:
Этот файл может содержать удивительное количество различных форматов. Текст может быть закодирован как ASCII, UTF-8, UTF-16 (с прямым или обратным...
Как использовать PHP для вывода данных?
Функциональность и простота PHP не вызывают сомнений. Однако знание нюансов этого языка не повредит разработчику, приступающему к его изучению. Сегодня поговорим о выводе данных с помощью PHP.
Как работает программа «Hello World!»?
Вы когда-нибудь задумывались о том, как работает знаменитая программа «Hello World!»? Давайте подробно разберём ассемблерный код и увидим, что происходит, так сказать, за кадром...
Сопоставление LiveData, SingleLiveEvent и MediatorLiveData в Android
Хотите эффективно управлять данными и событиями в приложении Android, а также создавать удобный в обслуживании код? Уделите внимание таким важным структурам Android Architecture Components, как LiveData, SingleLiveEvent и MediatorLiveData.
Оптимизация кода задачи на миллиард строк — ускоряем запуск в 87 раз
Поэтапно увеличим производительность реализации парсера для огромного файла. Устраним копии и баги, воспользуемся профилировщиком, хеш-картой линейного зондирования, микрооптимизациями, распараллелим код.
Найти все на C++: практическое руководство
Изучим, как на C++ реализуется и применяется функциональность find_all. Проиллюстрируем примерами, обозначим типичные проблемы, дадим рекомендации.
Как использовать управляемые Gradle устройства с собственными девайсами
Реализуем абстракцию Device с устройствами и эмуляторами. Используем собственную ферму устройств для удаленного запуска тестов и распараллеливания выполнения на нескольких устройствах.
Ключевые вопросы для собеседования по Spring Boot в 2023 году. Часть 1
Хотите получить должность Java-разработчика или повысить свой профессиональный уровень? Ознакомьтесь с актуальными ответами на 50 ключевых вопросов по микросервисам Spring Boot для собеседования с кандидатами на должность Java-программиста или инженера ПО.
Как писать безопасный код на Go
Что значит помнить о безопасности при написании кода Go? Ответить в одной, короткой статье кажется невозможным. По этой причине сузим его до нескольких конкретных практик. При постоянном применении они приведут к написанию надежного, безопасного и производительного кода. Как быть в курсе новостей о безопасности Go? Как поддерживать код Go в актуальном состоянии? Как тестировать код, уделяя особое внимание безопасности и надежности? Что такое CVE и где можно узнать о самых распространенных уязвимостях ПО?
Python и Java: комплексное сравнение двух популярных языков программирования
Python или Java? Какой язык выбрать для создания успешных проектов? Однозначного ответа на эти вопросы нет, поскольку и Python, и Java обладают как достоинствами, так и недостатками. Сегодня поговорим о сильных и слабых сторонах двух популярных языков программирования.
Реализация функции Pull-to-refresh с помощью Compose Material 3
Pull-to-refresh ("потяни, чтобы обновить") - удобная функция, которая позволяет пользователям приложений обновлять контент с помощью простых жестов. Опишем реализацию этой возможности посредством новейшей версии библиотеки Compose Material 3.
Настройка компонентов и тем Material UI: современный подход
Воспользуйтесь руководством по созданию ультрамодульной библиотеки компонентов с помощью Bit и Material UI. Она обеспечит расширенный набор настраиваемых компонентов и тем с предварительным просмотром и документацией, а также многократно используемую среду разработки.
Язык C: введение и настройка среды
Операционная система UNIX, компилятор C и практически все прикладные программы UNIX были написаны на языке С. Он является наиболее широко практикуемым компьютерным языком.
Удалённые вызовы процедур в Golang
Что такое удалённые вызовы процедур?
Удалённый вызов процедур (RPC) — это подпрограмма в распределённых вычислениях. Реализация RPC напоминает реализацию локальных вызовов, но обычно они не идентичны. Как...
Реализация подсказок с помощью Modifier в Jetpack Compose
Занимаетесь проектированием интуитивно понятных интерфейсов? Тогда вам не обойтись без подсказок, особенно необходимых при обновлении приложения. Предлагаем упрощенную версию реализации подсказок с использованием Modifier — компонента библиотеки Jetpack Compose.
Как создать приложение Android за 7 шагов
Хотите создать свое первое Android-приложение и ищете доступное руководство? Оно перед вами: всего 7 простых шагов - и приложение успешно работает на Android-устройстве.
Освоение функциональных возможностей Kotlin
Ознакомьтесь с основными функциями Kotlin. Их эффективное использование позволит создавать более упорядоченный, чистый, удобочитаемый и многократно используемый код.
Новые способы оптимизации стабильности в Jetpack Compose
C выпуском Compose 1.5.4 появился новый режим работы - Strong Skipping. Он позволяет сделать большее количество классов стабильными без дополнительного кода. Предлагаем на конкретных примерах кода разобраться, насколько это удобно и эффективно.
Запуск тестовых сценариев с Maven
Не знакомы с Maven? Здесь представлена кое-какая информация об этом инструменте. Ее должно быть достаточно для начала работы с ним.
Для запуска тестовых сценариев традиционно...
Запросы сразу к нескольким базам данных MySQL
Представьте, что вы создаёте SaaS-продукт (связанный с электронной торговлей), где каждый пользователь занимает свою собственную маленькую базу данных (MySQL). Можно гарантировать, что данные пользователя...
C++: полное руководство по операторам Switch со строками
Разберем эффективные альтернативы строковым переключениям. Проиллюстрируем практическими примерами, дадим рекомендации и поможем с выбором оптимального подхода.
Веб-скрейпинг с нуля на Python: библиотека Beautiful Soup
Простое руководство для новичков в Data Science: извлечение данных из веб-сайтов с помощью Python-библиотек Beautiful Soup и requests.
Принципы SOLID на Go
Изучим эффективное применение пяти принципов сквозь призму системы платежей. Проиллюстрируем примерами хорошего и плохого кода.
Асинхронность в Java
Асинхронное программирование — обширная и получившая широкое обсуждение тема, но инженеры-программисты все еще ищут, как лучше реализовать эту идею и интегрировать в приложения.
Мне — ...
Как установить Anaconda на Mac
Просто и понятно о том, как установить Anaconda на Mac и исправить страшную ошибку «conda command not found»
Необходимость Anaconda
Начав работать в области науки о данных,...
Как вернуть контроль над состоянием данных с RemoteResult
Построим на основе Result универсальный способ обозначать состояния ресурса, чтобы из представлений SwiftUI реагировать на его изменения. Рассмотрим реальное применение этого перечисления и адаптируем его для архитектуры TCA.
Эволюция кортежей в C#
Углубимся в изучение кортежей в C#. Посмотрим, как они совершенствовались от версии к версии и обрастали новыми эффективными возможностями.
Метапрограммирование на Go
Большинство современных сайтов реализуют некий MV*-фреймворк как формально, так и неформально. Если вы пишете много кода, скорее всего, вы пишете много моделей снова и...
10 практических примеров использования функций высшего порядка при разработке Android
Функции высшего порядка могут значительно повысить качество и удобство сопровождения кода. Рассмотрим 10 полезных примеров того, как их можно использовать.
Почему стоит использовать Ruby on Rails
Краткий обзор Ruby. Чем объясняется его эффективность? Разберем преимущества этого языка.
Как использовать горутины правильно
Разберем нюансы горутин, сценарии применения. Проиллюстрируем примерами и дадим рекомендации.
Глубокое погружение в Java: рефлексия и загрузчик классов. Часть 2
В этой части статьи углубимся в механизм загрузки классов. Этот процесс в Java тесно связан с рефлексией, поскольку направлен на внедрение нового поведения в программу во время выполнения.
Создание собственной симуляции активной материи на Python
Сегодня наша задача — создать симуляцию активной материи, т. е. роевое поведение. С помощью этой системы можно имитировать поведение стаи птиц или косяка рыб,...
Импорт в Python
Импорт в Python. Основы
В Python ключевое слово import применяется для того, чтобы сделать код в одном модуле доступным для работы в другом. Импорт в Python...
Контейнеры Docker и их связывание в сети
Создадим три файла Dockerfile с прямым подключением каждого к своему репозиторию GitHub, сделаем из них три пользовательских образа Docker, а из каждого образа - по одному контейнеру. Один изолируем в сети Development, два поместим в Production и проверим их взаимодействие.
Портируем решатель судоку с Java на WebAssembly
Мне давно хотелось приступить к изучению WebAssembly, но никак не находилось подходящего материала. Однако недавно я просматривал некоторые старые программы и вспомнил, что как-то...
is-A против has-A
Сравним эти две концепции: когда, зачем, где и как применяются. Изучим нюансы и проблемы, проиллюстрируем кодом.
Бережливое тестирование, или Почему модульные тесты хуже, чем вы думаете
Тестирование — противоречивая тема. Люди крепко держатся за свои убеждения относительно подходов к тестированию. Разработка через тестирование — самый яркий пример. Нехватка чётких эмпирических данных провоцирует людей на...
Чем отличается C++ от C#?
Заглянем в историю возникновения C++ и C# и разберем 9 отличий, чтобы понять, какую программу использовать при написании кода для конкретного приложения. Также решим, в какой язык стоит углубляться и какой осваивать в первую очередь!
Taipy: создание полнофункциональных приложений для работы с данными
Taipy - библиотека Python, предлагающая простые и быстрые способы создания полнофункциональных приложений для работы с данными. Узнайте, чем Taipy отличается от Streamlit и как с помощью Taipy создать простое, но эффективное приложение для работы с данными.
Как вызвать из C# генерируемую на Rust библиотеку
Объединяем преимущества двух языков. Узнаем, как создать библиотеку на Rust, выполнить сборку и с помощью P/Invoke вызвать из C# ее функции.
5 основных фреймворков для Java-разработчиков
Приветствую вас, Java-разработчики! Размышляете над тем, какой фреймворк освоить, чтобы стать полноценным специалистом? Спешу вас обрадовать — это как раз тема данной статьи. Как-то...
3 способа локального хранения и чтения учетных данных в Python
Хранение учетных данных в качестве глобальных переменных среды
Если учетные данные хранятся в виде глобальных переменных среды, к ним можно получить доступ с помощью любого...
Распознавание речи с помощью Python
Предлагаем краткое руководство по преобразованию речи в текст на Python с помощью нескольких строк кода. Справиться с этой задачей поможет API AssemblyAI, используемый тысячами организаций по всему миру.
От Pandas к Pyspark
Если Pandas удобно использовать для небольших наборов данных, то Pyspark - отличный инструмент для распределенных вычислений огромных массивов данных. Возьмите на заметку готовую инструкцию по преобразованию кода Pandas в Pyspark.
Нормальное завершение работы в Go
Go очень популярен среди разработчиков бэкенда, а его сообщество с каждым днем только растет.Лично я предпочитаю писать код на Go.
В этом кратком руководстве описывается...
Интуиция как ключ к успешному собеседованию по написанию кода
Для большинства будущих программистов техническое собеседование - пугающее испытание. Эти 5 шагов на пути к развитию интуиции при подготовке к собеседованию помогут не только избежать стресса, но и впечатлить интервьюеров.
Продвинутый функционал Git: хитрые приемы и команды
git — очень мощный инструмент, который практически каждый разработчик задействует ежедневно. Но для большинства его использование сводится всего к нескольким командам: pull, commit и...
Kotlin. Коллекции и последовательности
Kotlin из коробки предоставляет два способа обработки данных: энергичный для Collection и ленивый для Sequence.
Collection и Sequence
Разница между ленивыми и энергичными вычислениями в том, когда...
Покрытие кода в Rust
Покрытие кода - техника, которую должен освоить каждый тестировщик. Сегодня поговорим о ее полезных особенностях и возможностях, о которых, возможно, знают не все специалисты.
C++: руководство по считыванию CSV-файлов
Изучим разные подходы: от стандартных библиотек C++ для простых файлов до реализации пользовательской логики парсинга или привлечения сторонних библиотек для сценариев посложнее. Проиллюстрируем кодом и разберем нюансы.
7 лучших ресурсов для iOS-разработчиков в 2025 году
Эти ресурсы позволят вам работать быстрее, легче и эффективнее. С ними у вас не возникнет проблем при сборке, запуске, тестировании и масштабировании приложения. Они помогут улучшить его оформление, наладить управление ценами и привлечь как можно больше пользователей.
Сравниваем целочисленное и линейное программирование в Python
Разбираемся, в чем отличия между целочисленным и линейным программированием. Параллельно решаем распространенную задачу по математической оптимизации.
Лучшие практики модульного тестирования
Тестирование имеет большое значение. Модульное тестирование — еще большее, это бесспорно. Вот пишешь какой-то код, и надо бы покрыть его тестами. Но как только...
Swift: ссылочные типы и циклы сохранения, weak и unowned
Разберем один из 10 технических вопросов недавнего собеседования по Swift и Objective C. На примере покажем, почему для предотвращения цикла сохранения применяется слабая ссылка weak, а не бесхозная unowned.
Mito: быстрый анализ данных на Python
Выбиваетесь из графика? Боитесь, что не уложитесь в срок? Mito сэкономит драгоценное время. Эта библиотека Python поможет провести анализ данных в считанные минуты.
Как автоматизировать операции Kubernetes посредством Python
Научимся автоматизировать все "скучные" задачи и операции Kubernetes. Для этого познакомимся и подробно разберем внутренний механизм работы клиентской библиотеки Python для Kubernetes!
7 лучших CLI-библиотек Python в 2023 году
Повысьте свой уровень программирования на Python, освоив 7 самых продвинутых CLI-библиотек. Их возможности максимально упростят разработку интерфейса командной строки и позволят сократить код до минимума.
12 актуальных идей для портфолио Python: веб-сайты, аналитика данных, автоматизация и парсинг
Анализатор настроения, виртуальный ассистент, бот-трейдер, компьютерное зрение - лучшие идеи для pet-проекта или стартапа на Python!
Базовая торговая стратегия, позволяющая переиграть рынок
Предлагаем руководство по созданию на Python и бэктесту простой, но эффективной торговой стратегии. Используя всего два базовых финансовых показателя, она обеспечит быстрый и стабильный рост дохода в течение длительного времени.
Как участие в открытых проектах помогает найти работу?
Мечтаете о карьере разработчика ПО, но не знаете, как выгодно выделиться на фоне конкурентов? Узнайте о преимуществах участия в таких мероприятиях, как Hacktoberfest, и внесении вклада в такие открытые проекты, как Taipy, Composio, CopilotKit и ToolJet.
Rust: взгляд старого программиста
Так сложились обстоятельства, что у меня возник перерыв в работе, в который я решил переключиться на Rust. Название этого языка резонировало с моим настроением,...
Как спроектировать REST API для выполнения системных команд с помощью Actix Rust
Привет! Сегодня я расскажу, как создать REST API для выполнения системных команд на вашем сервере с помощью метода, которым пользуются известные компании.
Представьте, что вы...
Шаблон «запрос-ответ» в RabbitMQ: подход на основе EventListener в Node.js
Поиск нестандартных инженерных решений - всегда захватывающий процесс. Предлагаем ознакомиться с одним из таких решений, позволивших модифицировать стандартную реализацию шаблона "запроса-ответ" так, чтобы она соответствовала конкретному случаю использования.
Самый быстрый способ cоздать CRUD API в Golang
Поэтапно сделаем пригодный для промышленной эксплуатации API. Менее чем в 50 строках кода реализуем его с миграциями, REST-обработчиками, функцией main, создадим простейший компонент - слой данных.
Углубление в параметры ядра. Часть 1: загрузочные параметры
Диапазон статьи.
EC2 (эластичное облако вычислений) — это наиболее часто используемый AWS-сервис, поскольку он надёжен, гибок и позволяет масштабируемость. EC2 можно назвать “хребтом” AWS, т.к. прямо или...
Не используйте оператор «+» для объединения строк в Python
Когда я только начал работать с Python, интуитивно стал использовать оператор + для объединения строк, как в Java и многих других языках программирования.
Однако вскоре...
Как украсть API-ключи ChatGPT
А вы знаете, где нужно хранить API-ключи ChatGPT, чтобы спать спокойно? Известно ли вам, как злоумышленники могут обойти популярные техники безопасности и получить доступ к вашим API-ключам? Чтобы этого не случилось, ознакомьтесь с основными правилами безопасности фронтенда.
Как поразить интервьюеров умением инспектировать App Bundle
Хотите произвести неизгладимое впечатление при собеседовании на новую должность? Воспользуйтесь приведенными ниже советами по получению и инспектированию App Bundle.
Google Test: интеграция модульных тестов в C/C++ проекты
Научимся легко и просто интегрировать модульные тесты в C/C++ проекты.
Как создать пользовательскую поисковую панель SwiftUI с LazyVStack
Решаем практическую задачу по созданию инструмента для выбора кода страны - реализуем пользовательскую поисковую панель LazyVStack, содержащую данные с разделами и их индексами.
PostgreSQL и MySQL: подробное сравнение
Изучим преимущества, ограничения и сценарии этих двух баз данных. Сравним их по многим аспектам, поможем сделать правильный выбор.
4 принципа успешной поисковой системы и не только
Поиск повсюду и сталкиваемся мы с ним ежедневно. Эта функция реализована на каждом сайте и является частью любого IT-продукта. Вызов меню поиска простой комбинацией...
Машинное обучение с Amazon Aurora
Любая современная компания, достигнув определенного момента в своем развитии, сталкивается с непростой задачей: сделать свою продукцию более кастомизируемой для клиентов. Стремление к персонализации товаров...
Все модели машинного обучения за 6 минут
Все модели машинного обучения разделяются на обучение с учителем (supervised) и без учителя (unsupervised). В первую категорию входят регрессионная и классификационная модели. Рассмотрим значения...
Как скрывают секретные ключи и пароли в Python
Всякий раз, загружая свой проект или код на GitHub с общедоступным репозиторием, нужно помнить о безопасности. Ведь пользователи, которые запустят файл, содержащий секретные ключи...
Шаблон “Декоратор” в разработке на TypeScript
Овладейте полезным инструментом TS-разработчика - шаблоном проектирования "Декоратор". Он позволяет динамически расширять функциональность объектов, не усложняя читаемость кода.








































































































