Проекты на Python с помощью Visual Studio Code
Зачем использовать виртуальные среды в науке о данных?
Управление зависимостями играет важную роль для разработчиков пакетов и ПО. Но как насчет специалистов по науке о...
Придет ли язык программирования Mojo на смену Python?
Mojo считается крупнейшим из последних достижений в сфере разработки языков программирования. Высказываются даже предположения, что Mojo станет заменой Python. Каковы же на самом деле шансы Mojo стать новым Python?
Автоматическое масштабирование CI с помощью Kraken CI
Kraken CI — это современная локальная система CI/CD с открытым исходным кодом, которая обладает высокой масштабируемостью и ориентирована на тестирование. Kraken CI имеет лицензию Apache 2.0....
5 причин выбрать Flutter в 2020 году
Что такое Flutter?
Flutter — это платформенно-независимая технология Google для создания приложений, используемых на мобильных, настольных и веб-платформах. Официально она была представлена в декабре 2018 года и за...
Подходы к созданию линейных графиков для iOS-приложений на базе фреймворка SwiftUI
Специалисты в сфере мобильной разработки могут пользоваться несколькими способами для графического представления контента. Рассмотрим три метода создания диаграмм на iOS, в том числе и с помощью стороннего фреймворка.
Использование методов расширения в C# для элегантного и плавного кода
Методы расширения являются неотъемлемой частью современной платформы .NET и широко применяются в языке запросов LINQ, одной из лучших функциональных возможностей .NET. К сожалению, многих они отпугивают:...
Создание анимированной кнопки-счетчика в Jetpack Compose
Предлагаем пошаговое руководство по созданию в Jetpack Compose анимированной кнопки-счетчика для небольшого приложения. Это не только полезный навык, но и довольно увлекательное занятие.
Использование SwiftUI в UIKit
Наглядная демонстрация совмещения представлений SwiftUi с представлениями UIKit и реализации передачи данных между этими компонентами.
Проект API с точки зрения разработчика Android
Обучающее руководство по созданию API с точки зрения разработчика Android. Рассмотрим разные аспекты данного процесса: структуру проекта, архитектуру, точки входа, внедрение зависимостей и тестирование.
Ruby может быть лучше Python для абсолютных новичков
Когда дело доходит до обучения новичков программированию, часто доминируют два языка — это Ruby и Python. Оба являются интерпретируемыми языками высокого уровня, известные своей относительно легкостью изучения и большим поддерживающим сообществом. Однако если углубиться в нюансы обучения, то можно обнаружить несколько причин, по которым Ruby может предложить новичкам явные преимущества перед Python.
Как создать NFT-маркетплейс с полным стеком
Предлагаем подробное руководство по созданию полнофункционального NFT-маркетплейса. В реализации используются Polygon, Next.js, Tailwind, Solidity, Hardhat, Ethers.js и IPFS.
Построение потоков событий с Rust и Kafka: практическое руководство
Реализуем отправителей и получателей, настроим корректную обработку ошибок, конфигурацию и типы. Обозначим подводные камни, дадим рекомендации.
Переменная __name__ в Python
Введение в переменную _ _name_ _ и варианты ее использования в Python
Скорее всего, вы встречали переменную __name__ при работе с кодом Python. Она выглядит следующим...
Обработка файлов на C
Какие функции используются для открытия, редактирования и закрытия файлов? Рассмотрим особенности их применения с текстовыми и двоичными файлами.
Шаблон «запрос-ответ» в RabbitMQ: подход на основе EventListener в Node.js
Поиск нестандартных инженерных решений - всегда захватывающий процесс. Предлагаем ознакомиться с одним из таких решений, позволивших модифицировать стандартную реализацию шаблона "запроса-ответ" так, чтобы она соответствовала конкретному случаю использования.
Зачем и как реализовать ленивую загрузку компонентов в Angular
Ленивая загрузка — это техника загрузки чего-то по требованию.
Она применяется к различным уровням процесса разработки приложений — от модулей до компонентов. Ленивая загрузка на...
3 способа мониторинга изменений лог-файлов в Java
Научимся отслеживать изменения файлов тремя разными способами: запланированная задача + File.lastModified, WatchService и Apache Commons-IO.
C++: практическое руководство по побитовым операциям
Изучим, что происходит на битовом уровне. Разберем основные побитовые операторы и реальные сценарии, дадим рекомендации и практические задачи с решением.
Как автоанализ кода с помощью ИИ повышает безопасность приложений
Инженеры по безопасности приложений напоминают канатоходцев. Им постоянно приходится балансировать: быть универсальными специалистами по всему спектру приложений и экспертами по ряду флагманских приложений. Узнайте о том, как ИИ способен помочь в этой непростой ситуации.
10 полезных советов по повышению производительности при работе с VS Code
Visual Studio Code - не просто текстовый редактор. Это мощный инструмент, который значительно повышает производительность и оптимизирует рабочий процесс. Воспользуйтесь этими советами по работе с ним.
Фреймворк Executor в Java
Вплоть до Java 5 создавать потоки и управлять ими было возможно только на уровне приложения. Объекты Thread требуют значительного объема памяти. Таким образом, если...
Создание API в R при помощи Plumber
Что это за инструмент - Plumber - и как с его помощью можно легко вывести собственное приложение R в продакшен-среду? Ответ на примере создания простого API.
Начнем работу с Mock в Python
Предисловие
Mock - это просто объект, который создает пустой тест для определенной части программы.
Вместо вызова обычной проверки, вы вызываете mock и смотрите, как проходит тест...
7 расширенных возможностей Python
Python - один из самых продвинутых языков программирования, который широко используется во многих отраслях. Он обладает множеством расширенных функций, которые делают его мощным инструментом в руках опытных программистов. Вот подборка из 7 наиболее полезных расширенных возможностей Python.
Java-Lombok: нужны ли геттеры и сеттеры?
Привет всем энтузиастам Java! Давайте поговорим о Java и рефакторинге. Как известно, Java остается одним из наиболее популярным языком программирования. В каждом новом релизе...
Python/C API - ускорение Python при помощи кода на C
Пакет ctypes для начинающих: запуск библиотек на C из Python и функции CUDA ускорят не только вычисления, но и процесс разработки.
Идеальная настройка вашего Golang проекта
Часть 1, Часть 2, Часть 3
При запуске нового проекта самые большие трудности у меня всегда вызывала его настройка. Всегда стараешься сделать её «идеальной»:
используешь лучшую...
Создание пользовательских аннотаций в Java
Продолжаем разговор об аннотациях в Java - теперь кроме предопределенных "из коробки" аннотаций научимся писать и применять свои собственные.
Ruby on Rails — пишите тесты, как профессионал
Узнаем на простых и эффективных примерах, как пишутся оптимизированные, быстрые и точные тесты. Хорошие тесты против плохих: как сокращается дублирование, поддерживается четкая структурированность, соблюдается принцип DRY.
Как создать анимацию мерцающего текста в Jetpack Compose
Воспользуйтесь руководством по созданию и применению анимации мерцающего текста в Jetpack Compose. Такая анимация позволит повысить плавность работы приложений, улучшить взаимодействие пользователей с интерфейсом, сделать более комфортным время ожидания.
ViewModel. События как состояние — это антипаттерн
Трижды разоблачим антипаттерн одноразовых событий и сравним аргументацию для осознанного выбора из имеющихся подходов. В чем суть проектного решения команды Kotlin - «гарантии быстрой отмены»?
Golang — это не язык для бэкенда. Это язык для SaaS
Golang часто сравнивают с другими языками для бэкенда, но у него другая специализация. Узнайте о реальном опыте перехода с Java на Go: что стало с производительностью, затратами и процессом развертывания в реальных SaaS-проектах.
7 признаков того, что Flutter готов к разработке корпоративных приложений
Есть ли у Flutter будущее в корпоративной сфере? Ответить на этот вопрос разработчики смогли только после бета-тестирования движка. Flutter доказал свою перспективность, предоставив программистам массу встроенных средств, облегчающих разработку платформозависимых приложений.
Parcel + Rust и WASM = идеальный ромком
Введение
Мне уже давно хотелось попробовать использовать Rust и WASM вместе. Причин для этого была масса: небольшой размер пакета, низкоуровневый доступ с надёжной производительностью и...
5 реальных способов достичь сбалансированности трудовой жизни
Вы руководитель инженерного отдела, желающий достичь баланса между работой и отдыхом? Следуйте этим 5 практическим советам, основанным не на стереотипах, а на реальном опыте. Они помогут привести команду к успеху без ущерба для здоровья.
Как специалисту по данным написать веб-приложение, используя простой Python
Проект машинного обучения нельзя назвать действительно законченным, пока у вас нет хорошего способа его продемонстрировать.
Раньше для демонстрации проекта хватало хороших визуализаций или небольших PPT,...
5 задач для Python
Лучший способ укрепить знания и попрактиковаться в Python
Цель этой статьи — помочь вам разобраться в основах языка, а не поделиться готовыми ответами, которые легко вызубрить и списать.
5...
Модульные тесты на Golang: от стандартного Testing до Testify
Напишем тесты для проверки работы функций. Посмотрим, как совершенствуются тестовые сценарии с Testify.
Развертывание Kubernetes с пользовательским файлом index.html в поде Nginx с ConfigMap
Настроим веб-страницу index.html в поде Kubernetes с ConfigMap и веб-сервером Nginx. Убедимся в ее работоспособности, выведя сообщение в командную строку и веб-браузер.
MVVM на Android с компонентами архитектуры + библиотека Koin
Введение
С MVVM (Model-View-ViewModel) процесс разработки графического интерфейса для пользователей делится на две части. Первая — это работа с языком разметки или кодом GUI. Вторая — разработка бизнес-логики или...
5 проектов Go: управление безопасностью и контейнерами, создание бэкендов
Расскажем об интересных проектах Golang, связанных в том числе с разведкой по открытым источникам. Используйте их в своих приложениях.
Как автоматизировать операции Kubernetes посредством Python
Научимся автоматизировать все "скучные" задачи и операции Kubernetes. Для этого познакомимся и подробно разберем внутренний механизм работы клиентской библиотеки Python для Kubernetes!
Основы SQL: разница между GROUP BY и PARTITION BY
Несмотря на кажущуюся простоту, SQL может таить в себе немало особенностей, о которых лучше узнать заранее. Сегодня рассмотрим основные различия между операторами GROUP BY и PARTITION BY, а также их основные сценарии использования.
Как создать Open Source библиотеку Android
Пошагово пройдем процесс проектирования. Спланируем надежную стратегию согласно жизненным циклам проекта ПО с открытым исходным кодом - от проектирования до выпуска.
Реализация распределенной трассировки с OpenTelemetry и Spring Boot 3
Создадим два микросервиса, сконфигурируем OpenTelemetry для приложения Gradle, протестируем и запустим проект. Обозначим типичные проблемы и их решения, дадим рекомендации.
Как создать приложение Android за 7 шагов
Хотите создать свое первое Android-приложение и ищете доступное руководство? Оно перед вами: всего 7 простых шагов - и приложение успешно работает на Android-устройстве.
Почему в Python по-прежнему нужна функция map()
При наличии различных альтернатив функция map() в Python кажется излишней. Так нужна ли она в Python? Предлагаем обсудить этот вопрос вместе с Python-разработчиком.
Bash, Python или JavaScript: какой язык лучше для автоматизации?
Предлагаем сравнение преимуществ и недостатков Shell-сценариев на основе Bash, Python и JavaScript. Выбирайте язык программирования в соответствии с вашими потребностями.
Thonny - идеальная IDE для новичков Python
Мечтаете освоить программирование на Python, но не знаете, с чего начать? Не волнуйтесь. Thonny станет вашим гидом на протяжении всего пути обучения — даже...
[C++] часть 1: многопоточность, конкурентность и параллелизм: ОСНОВЫ
Простое руководство по изучению многопоточности, конкурентности и параллелизма в C++
Вначале, когда ещё только состоялось моё знакомство с многопоточностью в C++, многое было мне непонятным...
Создание интерфейсов RESTful API в Golang
Часть 1, Часть 2, Часть 3
В предыдущей статье мы говорили о создании «идеальной» настройки для Golang проекта. Теперь пришла пора найти для неё...
Реализация подсказок с помощью Modifier в Jetpack Compose
Занимаетесь проектированием интуитивно понятных интерфейсов? Тогда вам не обойтись без подсказок, особенно необходимых при обновлении приложения. Предлагаем упрощенную версию реализации подсказок с использованием Modifier — компонента библиотеки Jetpack Compose.
Язык C: операторы
Оператор - это символ, который дает команду компилятору выполнить определенные математические или логические функции. В распоряжении пользователей языка С множество встроенных операторов различных типов. Рассмотрим их в данной статье.
C++: полное руководство по обработке файлов с fstream
Разберем основные файловые операции, проиллюстрируем практическими примерами. Обозначим типичные сценарии, дадим рекомендации.
Простое объяснение интерфейсов на Golang
Что общего у электророзеток с интерфейсами? Как создавать интерфейсы правильно? Попробуем понять этого непонятного зверя!
Состояния потоков в Java
«Гораздо проще уже спроектировать класс потокобезопасным, чем модернизировать его позже».― Брайан Гетц.
Потоки Java играют важную роль в параллельном программировании. Поток в любой момент времени находится...
12 актуальных идей для портфолио Python: веб-сайты, аналитика данных, автоматизация и парсинг
Анализатор настроения, виртуальный ассистент, бот-трейдер, компьютерное зрение - лучшие идеи для pet-проекта или стартапа на Python!
Приложение React Native с поддержкой Apple Watch и виджетов
Хотите достичь новых горизонтов в разработке на React Native? Сегодня поговорим о том, как интегрировать приложение Apple watchOS с приложением на React Native, а также создадим виджет, который можно установить в циферблате часов в качестве дополнительной функции.
Выполнение AES/GCM в Android
Столкнувшись с рядом проблем, связанных с выполнением шифрования и расшифровки AES в Android, я решил поделиться своим опытом.
TL;DR: здесь можно найти готовое решение. Если...
Метапрограммирование на Go
Большинство современных сайтов реализуют некий MV*-фреймворк как формально, так и неформально. Если вы пишете много кода, скорее всего, вы пишете много моделей снова и...
Знакомство с Papermill
Как превратить Jupyter Notebook в рабочий процесс по обработке данных
1. Введение
Jupyter Notebook — это «золотой стандарт» в разведочном анализе данных (EDA-анализ) и отличный инструмент для документирования...
Перехват сетевых запросов из мобильного приложения
Предлагаем пошаговое руководство по установке и настройке перехвата сетевых запросов с помощью прокси-сервера. Этот процесс открывает широкие возможности для отладки, оптимизации производительности и анализа безопасности приложений.
C++: подробное руководство по разыменованию указателя
Разберем нюансы и ошибки разыменования. Проиллюстрируем примерами и реальным сценарием. Сравним эффективность прямого доступа к массиву и разыменования указателя.
Подробнее о функциях высшего порядка
В JavaScript, функции являются “функциями первого класса”, соответственно они могут:
храниться в переменной, объекте или массиве.
передаваться как аргументы в другую функцию.
и даже...
6 шагов для старта в машинном обучении в 2025 году
Все, что вам нужно для изучения машинного обучения в 2025 году, - ноутбук и дорожная карта, которую вы должны выполнить. Помимо 5 очевидных шагов - изучения Python, математики, машинного обучения, глубокого обучения, разработки проектов - вас ждет бонусный лайфхак, который и поможет найти желанную работу.
Продвинутое применение «select» в Ruby
На примерах изучим, как select комбинируется и объединяется с другими методами. Рассмотрим особенности ключевого слова next со сложными условиями.
ClickHouse: оконные функции с нуля
Узнаем, как в ClickHouse упрощаются анализ и агрегирование сложных данных, компактно и эффективно внутри запроса вычисляются нарастающие итоги, ранжирование, процентили. Разберем синтаксис оконных функций, приведем примеры из реальных сценариев.
Matplotlib или Plotly: как выбрать библиотеку для визуализации данных в Python
Не знаете, что предпочесть: Plotly или Matplotlib? Неправильный выбор может стоить вам часов работы и свести на нет всю эффективность дэшборда. Секрет в том, что "лучшей" библиотеки не существует — есть та, что идеально подходит под ваши цели. Готовы узнать, какая из них сделает ваш проект по-настоящему мощным?
Почему Dockerfile больше не нужен для создания контейнера в Go
Интегрируя, адаптируя и обучая новых инженеров в FlowUp, я пришел к выводу: на формирование глубокого понимания того, как работают Dockerfiles, уходит слишком много времени....
Как быстро создать PDF-файл с помощью Python
Научитесь создавать PDF-файлы за несколько минут с помощью Python и HTML-шаблонов. Предлагаем простой гайд в 3 шага.
7 фреймворков для работы с LLM
Предлагаем детальное описание 7 фреймворков с открытым исходным кодом для развертывания и обслуживания LLM. Сравните особенности, преимущества, ограничения и затратность таких фреймворков, как vLLM, Text Generation Inference, OpenLLM, Ray Serve, CTranslate2 и MLC LLM.
7 признаков того, что вы стали продвинутым пользователем Sklearn
Мечтаете присоединиться к клубу опытных пользователей Sklearn - настоящих мастеров машинного обучения? А может, вы уже состоите в нем, не подозревая об этом? Давайте проверим!
Как проходится ассоциативный массив на C++
Изучим способы итеративного прохождения - от простого цикла for с диапазоном и до гибких итераторов. Разберем нюансы и типичные ошибки, проиллюстрируем примерами.
C++: полное руководство по параметризованным классам
Изучим особенности создания и реального применения этих классов. Проиллюстрируем практическими реализациями и примерами.
Модульное тестирование с помощью JUnit в Android
Тестирование — неотъемлемая часть полноценной разработки программного обеспечения. Сегодня рассмотрим фреймворк JUnit, а также функции и правила, которые помогут провести тесты Android-продукта на достойном уровне.
Новые способы оптимизации стабильности в Jetpack Compose
C выпуском Compose 1.5.4 появился новый режим работы - Strong Skipping. Он позволяет сделать большее количество классов стабильными без дополнительного кода. Предлагаем на конкретных примерах кода разобраться, насколько это удобно и эффективно.
Как создавать легкие платформонезависимые приложения на Go — без JS и BS
Ознакомимся с методами, виджетами и функционалом библиотеки Gio, сделаем приложение GoGiggles, запустим его в ОС. Добавим функционал СhatGPT, кнопку, обработку событий нажатия.
23 шаблона проектирования для 99% разработчиков на Java
Изучим все важные шаблоны ООП для опытных и старших разработчиков не только Java, но и любых других языков. Кратко охарактеризуем каждый из порождающих, структурных и поведенческих шаблонов, рассмотрим примеры.
Как создать и развернуть бота для Twitter при помощи Python, Tweepy и PythonAnywhere
Среда разработки
Для создания бота потребуется настроить нашу среду разработки и установить необходимые библиотеки и инструменты.Что нам понадобится:
Python 3virtualenv — среда разработкиRequests library — библиотека для удобной работы с...
UseCase: лучшие практики чистой архитектуры и красные флаги
Предлагаем подробное руководство по юзкейсам, на которых основана чистая архитектура. Корректное использование юзкейсов - с учетом красных флагов - поможет пользователям приложений достигать желаемых результатов без лишних нервов и усилий.
Как реализовать в Golang двухфакторную аутентификацию с TOTP
Поэтапно настроим среду, интегрируем в проект библиотеку и рассмотрим различные аспекты 2FA, включая генерирование и хранение секретов, обработку аутентификации пользователя и проверку кодов TOTP. Дадим рекомендации по реализации в приложении Golang.
Что нового в Python 3.10?
Разработка Python 3.10 стабилизировалась, и пришло время наконец-то протестировать все те новые функции, которые войдут в финальный выпуск.
Мы расскажем все самое интересное о том,...
Языки C и C++. Где их используют и зачем?
Сфера применения C и C++ на удивление широка. Даже в сегодняшнем мире, несмотря на всё многообразие современных надёжных инструментов, эти два языка программирования остаются незаменимыми
Функциональное программирование - будущее компьютерной науки?
Функциональное программирование (ФП) существует уже на протяжении последних шести десятилетий, и на данный момент не прекращает попыток преодолеть повсеместное доминирование объектно-ориентированного программирования (ООП). В...
Как Ktlint облегчает жизнь разработчикам
Узнайте о фантастических возможностях Ktlint и о том, как внедрить его в проект. Этот инструмент, выполняющий статический анализ и автоматическое форматирование кода, позволит сэкономить массу времени и трудозатрат.
3 инструмента для отслеживания и визуализации выполнения кода на Python
Для чего нужны новые инструменты?
Видели когда-нибудь такой вывод ошибок?
2 divided by 1 is equal to 2.0.
Traceback (most recent call last):
File "loguru_example.py", line...
Дорожная карта iOS для разработчиков Android: основы
Хотите стать универсальным разработчиком, знающим особенности программирования как для Android, так и для iOS? Этот гайд расскажет о различиях и сходствах работы с этими двумя платформами.
Фреймворк The Composable Architecture
Combine с закрытым исходным кодом Apple скоро заменят в TCA на код async/await, сделав его фреймворком с поддержкой нескольких платформ и, возможно, с портированием на другие языки. Рассмотрим функционал, преимущества, последние разработки, применение и план освоения TCA.
Максимальная производительность Pandas Python
В этой статье мы докажем, что использование Nuclio и RAPIDS, бесплатной open-source платформы для ускорения обработки данных от NVIDIA, может значительно увеличить производительность Python.
Я...
Почему борьба GitHub с тостовыми уведомлениями — плохая новость для специалистов по доступности
Решение GitHub полностью отказаться от тостовых уведомлений в своих продуктах, мотивированное заботой о доступности, вызвало бурную дискуссию в сообществе. Но является ли запрет действительно решением проблемы?
Хитрости на Python
Болтовня ничего не стоит. Покажите мне код.
Эти приемы на Python весьма незаурядны и крайне полезны.
Обмен значениями
Создание одной строки из всех элементов списка
Поиск самого частого значения...
4 совета по работе с потоками и мьютексами в C++
C++ представляет собой отличный язык программирования, который принято ассоциировать с высокой производительностью, а также доступным управлением памятью и указателями. Тем не менее в нем...
Почему большинство программистов выбирают Python
Python - второй (после JavaScript) по распространенности язык программирования, который используют 15,7 млн человек. Рассказываем, с чем связана его популярность и как понять, подходит ли он именно вам.
Зачем изучать Linux?
Сегодня многие домашние пользователи и компании переходят на Linux. И это не единственная причина, почему вам стоит присоединиться к их числу. Даже если вы поклонник Windows, изучение Linux - просто необходимость для разработчика ПО.
cin.ignore() на C++
Изучим приемы и сценарии применения этой функции, проиллюстрируем примерами. Разберем типичные ошибки, дадим рекомендации по производительности.
Визуализация стратегии автоматизированного тестирования
Стратегия тестирования — это подход к автоматизированному тестированию вашего программного обеспечения. Она очень важна, и к ней следует отнестись серьезно. Я предложу визуальный способ...
Как оптимизировать код на Python
Как я сократил время выполнения приложения на 1/10
Данные советы просты в реализации и могут пригодиться вам в обозримом будущем.
Считается, что первоочередной задачей программиста является написание...
Классическая игра “Пинг-понг” на Java
Делу - время, игре - час! Этот час потратим на создание игры "Пинг-понг" с помощью библиотеки Processing и Java. Будет очень интересно!
Стоит ли заменить Python на Julia?
В течение последних двух лет популярность интерпретируемого языка Python, который был написан на C, резко возросла. Хоть он и является полезным языком, который стал...
Разветвление на различные очереди SQS с помощью фильтрации сообщений SNS
SNS и SQS — сервисы AWS, которые часто находят применение в событийно-управляемой архитектуре. Сочетание этих сервисов дает возможность отправлять сообщения по разным каналам. Часто...
R - язык для статистической обработки данных. Часть 3/3
Часть 1, Часть 2, Часть 3
В предыдущем материале мы остановились на теме корреляции из раздела “Статистические вычисления в языке R”. Переходим к ковариации.
Ковариация
Ковариация была...
Хроники нового текстового редактора - от замысла до реализации
Стандартный Apple Notes, более продвинутый Google Docs, Microsoft Word и Medium — всё это редакторы, которые позволяют фиксировать наши важные мысли и информацию, тем самым помогая...
Чистый код на JavaScript: вертикальное форматирование
Форматирование кода в легко читаемый во многом определяет его итоговую чистоту. Не отформатированный как следует код требует больше умственных усилий для понимания.
В этой статье...
5 актуальных расширений Xcode для оптимизации разработки
Пополним арсенал разработчика полезными расширения для повышения продуктивности: SwiftPlantUML, SwiftFormat, Import, SwiftMockGeneratorForXcode, XVim2.
Как избавиться от операторов switch - малоизвестный способ
Простой способ облагородить свой код
Скорее всего, вы, как и я, научились не перегружать исходный код операторами if . Они трудно читаются. Такой код сложно проверить и...

















































![[C++] часть 1: многопоточность, конкурентность и параллелизм: ОСНОВЫ CPP](https://nuancesprog.ru/wp-content/uploads/2019/11/0_OWdKXgfpUkqsttH8-1-218x150.jpg)






















































