[{"data":1,"prerenderedAt":10644},["ShallowReactive",2],{"navigation_docs":3,"-cpp-std-string-search":3261,"-cpp-std-string-search-surround":10639},[4,1707,1896,2350,2531,2738,2860,2910,2967,3001,3127,3204,3257],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"План навчання: Курс C++ — Продовження (Статті 29–60+)","\u002Fcpp\u002Fcurriculum-plan","02.cpp\u002Fcurriculum-plan",{"title":1897,"icon":1898,"path":1899,"stem":1900,"children":1901,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[1902,1928,1982,2004,2308,2346],{"title":1903,"icon":1904,"path":1905,"stem":1906,"children":1907,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[1908,1912,1916,1920,1924],{"title":1909,"path":1910,"stem":1911},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":1913,"path":1914,"stem":1915},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":1917,"path":1918,"stem":1919},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":1921,"path":1922,"stem":1923},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":1925,"path":1926,"stem":1927},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":1929,"icon":1930,"path":1931,"stem":1932,"children":1933,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[1934,1938,1942,1946,1950,1954,1958,1962,1966,1970,1974,1978],{"title":1935,"path":1936,"stem":1937},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":1939,"path":1940,"stem":1941},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":1943,"path":1944,"stem":1945},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":1947,"path":1948,"stem":1949},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":1951,"path":1952,"stem":1953},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":1955,"path":1956,"stem":1957},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":1959,"path":1960,"stem":1961},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":1963,"path":1964,"stem":1965},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":1967,"path":1968,"stem":1969},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":1971,"path":1972,"stem":1973},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":1975,"path":1976,"stem":1977},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":1979,"path":1980,"stem":1981},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":1983,"icon":1984,"path":1985,"stem":1986,"children":1987,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[1988,1992,1996,2000],{"title":1989,"path":1990,"stem":1991},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":1993,"path":1994,"stem":1995},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":1997,"path":1998,"stem":1999},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2001,"path":2002,"stem":2003},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2005,"icon":2006,"path":2007,"stem":2008,"children":2009},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2010,2011,2015,2019,2023,2027,2090,2125,2277],{"title":2005,"path":2007,"stem":2008},{"title":2012,"path":2013,"stem":2014},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2016,"path":2017,"stem":2018},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2020,"path":2021,"stem":2022},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2024,"path":2025,"stem":2026},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2028,"icon":132,"path":2029,"stem":2030,"children":2031},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2032,2034,2038,2042,2046,2050,2054,2058,2062,2066,2070,2074,2078,2082,2086],{"title":2033,"path":2029,"stem":2030},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2035,"path":2036,"stem":2037},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2039,"path":2040,"stem":2041},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2043,"path":2044,"stem":2045},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2047,"path":2048,"stem":2049},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2051,"path":2052,"stem":2053},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2055,"path":2056,"stem":2057},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2059,"path":2060,"stem":2061},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2063,"path":2064,"stem":2065},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2067,"path":2068,"stem":2069},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2071,"path":2072,"stem":2073},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2075,"path":2076,"stem":2077},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2079,"path":2080,"stem":2081},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2083,"path":2084,"stem":2085},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2087,"path":2088,"stem":2089},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2091,"icon":2006,"path":2092,"stem":2093,"children":2094},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2095,2097,2101,2105,2109,2113,2117,2121],{"title":2096,"path":2092,"stem":2093},"React Router: Навігаційна система сучасного вебу",{"title":2098,"path":2099,"stem":2100},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2102,"path":2103,"stem":2104},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2106,"path":2107,"stem":2108},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2110,"path":2111,"stem":2112},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2114,"path":2115,"stem":2116},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2118,"path":2119,"stem":2120},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2122,"path":2123,"stem":2124},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2126,"icon":132,"path":2127,"stem":2128,"children":2129},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2130,2132,2148,2177,2186,2207,2223,2252],{"title":2131,"path":2127,"stem":2128},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2133,"stem":2134,"children":2135,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2136,2140,2144],{"title":2137,"path":2138,"stem":2139},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2141,"path":2142,"stem":2143},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2145,"path":2146,"stem":2147},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2149,"icon":132,"path":2150,"stem":2151,"children":2152,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2153,2157,2161,2165,2169,2173],{"title":2154,"path":2155,"stem":2156},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2158,"path":2159,"stem":2160},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2162,"path":2163,"stem":2164},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2166,"path":2167,"stem":2168},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2170,"path":2171,"stem":2172},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2174,"path":2175,"stem":2176},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2178,"icon":132,"path":2179,"stem":2180,"children":2181,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2182],{"title":2183,"path":2184,"stem":2185},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2187,"icon":132,"path":2188,"stem":2189,"children":2190,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2191,2195,2199,2203],{"title":2192,"path":2193,"stem":2194},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2196,"path":2197,"stem":2198},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2200,"path":2201,"stem":2202},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2204,"path":2205,"stem":2206},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2208,"icon":92,"path":2209,"stem":2210,"children":2211,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2212,2216,2220],{"title":2213,"path":2214,"stem":2215},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2217,"path":2218,"stem":2219},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2067,"path":2221,"stem":2222},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2224,"icon":132,"path":2225,"stem":2226,"children":2227,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2228,2232,2236,2240,2244,2248],{"title":2229,"path":2230,"stem":2231},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2233,"path":2234,"stem":2235},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2237,"path":2238,"stem":2239},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2241,"path":2242,"stem":2243},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2245,"path":2246,"stem":2247},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2249,"path":2250,"stem":2251},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2253,"icon":132,"path":2254,"stem":2255,"children":2256,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2257,2261,2265,2269,2273],{"title":2258,"path":2259,"stem":2260},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2262,"path":2263,"stem":2264},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2266,"path":2267,"stem":2268},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2270,"path":2271,"stem":2272},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2274,"path":2275,"stem":2276},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2278,"icon":132,"path":2279,"stem":2280,"children":2281},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2282,2284,2288,2292,2296,2300,2304],{"title":2283,"path":2279,"stem":2280},"UI Бібліотеки в React",{"title":2285,"path":2286,"stem":2287},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2289,"path":2290,"stem":2291},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2293,"path":2294,"stem":2295},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2297,"path":2298,"stem":2299},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2301,"path":2302,"stem":2303},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2305,"path":2306,"stem":2307},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2309,"icon":2310,"path":2311,"stem":2312,"children":2313,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2314,2318,2322,2326,2330,2334,2338,2342],{"title":2315,"path":2316,"stem":2317},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2319,"path":2320,"stem":2321},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2323,"path":2324,"stem":2325},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2327,"path":2328,"stem":2329},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2331,"path":2332,"stem":2333},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2335,"path":2336,"stem":2337},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2339,"path":2340,"stem":2341},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2343,"path":2344,"stem":2345},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2347,"path":2348,"stem":2349},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2351,"icon":2352,"path":2353,"stem":2354,"children":2355,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2356,2359,2362,2366,2370,2374,2378],{"title":162,"path":2357,"stem":2358},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2360,"stem":2361},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2363,"path":2364,"stem":2365},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2367,"path":2368,"stem":2369},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2371,"path":2372,"stem":2373},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2375,"path":2376,"stem":2377},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2379,"path":2380,"stem":2381,"children":2382,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2383,2387,2391,2395,2399,2403,2407,2411,2415,2419,2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503,2507,2511,2515,2519,2523,2527],{"title":2384,"path":2385,"stem":2386},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2388,"path":2389,"stem":2390},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2392,"path":2393,"stem":2394},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2396,"path":2397,"stem":2398},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2400,"path":2401,"stem":2402},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2404,"path":2405,"stem":2406},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2408,"path":2409,"stem":2410},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2412,"path":2413,"stem":2414},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2416,"path":2417,"stem":2418},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2420,"path":2421,"stem":2422},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2424,"path":2425,"stem":2426},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2428,"path":2429,"stem":2430},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2432,"path":2433,"stem":2434},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2436,"path":2437,"stem":2438},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2440,"path":2441,"stem":2442},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2444,"path":2445,"stem":2446},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2448,"path":2449,"stem":2450},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2452,"path":2453,"stem":2454},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2456,"path":2457,"stem":2458},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2460,"path":2461,"stem":2462},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2464,"path":2465,"stem":2466},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2468,"path":2469,"stem":2470},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2472,"path":2473,"stem":2474},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2476,"path":2477,"stem":2478},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2480,"path":2481,"stem":2482},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2484,"path":2485,"stem":2486},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2488,"path":2489,"stem":2490},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2492,"path":2493,"stem":2494},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2496,"path":2497,"stem":2498},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2500,"path":2501,"stem":2502},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2504,"path":2505,"stem":2506},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2508,"path":2509,"stem":2510},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2512,"path":2513,"stem":2514},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2516,"path":2517,"stem":2518},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2520,"path":2521,"stem":2522},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2524,"path":2525,"stem":2526},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2528,"path":2529,"stem":2530},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2532,"icon":2533,"path":2534,"stem":2535,"children":2536,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2537,2567,2590,2627,2656,2674,2708,2720,2729],{"title":2538,"icon":2539,"path":2540,"stem":2541,"children":2542,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2543,2547,2551,2555,2559,2563],{"title":2544,"path":2545,"stem":2546},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2548,"path":2549,"stem":2550},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2552,"path":2553,"stem":2554},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2556,"path":2557,"stem":2558},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2560,"path":2561,"stem":2562},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2564,"path":2565,"stem":2566},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2568,"icon":2533,"path":2569,"stem":2570,"children":2571,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2572,2576,2582,2586],{"title":2573,"path":2574,"stem":2575},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2577,"path":2578,"stem":2579,"children":2580},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2581],{"title":2577,"path":2578,"stem":2579},{"title":2583,"path":2584,"stem":2585},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2587,"path":2588,"stem":2589},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2591,"icon":2533,"path":2592,"stem":2593,"children":2594,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2595,2599,2603,2607,2611,2615,2619,2623],{"title":2596,"path":2597,"stem":2598},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2600,"path":2601,"stem":2602},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2604,"path":2605,"stem":2606},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2608,"path":2609,"stem":2610},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2612,"path":2613,"stem":2614},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2616,"path":2617,"stem":2618},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2620,"path":2621,"stem":2622},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2624,"path":2625,"stem":2626},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2628,"icon":2533,"path":2629,"stem":2630,"children":2631,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2632,2636,2640,2644,2648,2652],{"title":2633,"path":2634,"stem":2635},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2637,"path":2638,"stem":2639},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2641,"path":2642,"stem":2643},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2645,"path":2646,"stem":2647},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2649,"path":2650,"stem":2651},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2653,"path":2654,"stem":2655},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2657,"icon":2658,"path":2659,"stem":2660,"children":2661,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2662,2666,2670],{"title":2663,"path":2664,"stem":2665},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2667,"path":2668,"stem":2669},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":2671,"path":2672,"stem":2673},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":2675,"icon":2676,"path":2677,"stem":2678,"children":2679,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[2680,2684,2688,2692,2696,2700,2704],{"title":2681,"path":2682,"stem":2683},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":2685,"path":2686,"stem":2687},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":2689,"path":2690,"stem":2691},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":2693,"path":2694,"stem":2695},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":2697,"path":2698,"stem":2699},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":2701,"path":2702,"stem":2703},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":2705,"path":2706,"stem":2707},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":2705,"icon":793,"path":2709,"stem":2710,"children":2711,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[2712,2716],{"title":2713,"path":2714,"stem":2715},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":2717,"path":2718,"stem":2719},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":2721,"icon":2722,"path":2723,"stem":2724,"children":2725,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[2726],{"title":2721,"path":2727,"stem":2728},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":2730,"icon":2731,"path":2732,"stem":2733,"children":2734,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[2735],{"title":2730,"path":2736,"stem":2737},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":2739,"icon":2740,"path":2741,"stem":2742,"children":2743,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[2744,2820],{"title":2745,"icon":2746,"path":2747,"stem":2748,"children":2749},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[2750,2752,2756,2760,2764,2768,2772,2776,2780,2784,2788,2792,2796,2800,2804,2808,2812,2816],{"title":2751,"path":2747,"stem":2748},"Docker: від нуля до production",{"title":2753,"path":2754,"stem":2755},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":2757,"path":2758,"stem":2759},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":2761,"path":2762,"stem":2763},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":2765,"path":2766,"stem":2767},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":2769,"path":2770,"stem":2771},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":2773,"path":2774,"stem":2775},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":2777,"path":2778,"stem":2779},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":2781,"path":2782,"stem":2783},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":2785,"path":2786,"stem":2787},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":2789,"path":2790,"stem":2791},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":2793,"path":2794,"stem":2795},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":2797,"path":2798,"stem":2799},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":2801,"path":2802,"stem":2803},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":2805,"path":2806,"stem":2807},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":2809,"path":2810,"stem":2811},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":2813,"path":2814,"stem":2815},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":2817,"path":2818,"stem":2819},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":2821,"icon":2822,"path":2823,"stem":2824,"children":2825},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[2826,2828,2832,2836,2840,2844,2848,2852,2856],{"title":2827,"path":2823,"stem":2824},"Kubernetes: від розробки до production",{"title":2829,"path":2830,"stem":2831},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":2833,"path":2834,"stem":2835},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":2837,"path":2838,"stem":2839},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":2841,"path":2842,"stem":2843},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":2845,"path":2846,"stem":2847},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":2849,"path":2850,"stem":2851},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":2853,"path":2854,"stem":2855},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":2857,"path":2858,"stem":2859},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":2861,"icon":2862,"path":2863,"stem":2864,"children":2865,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[2866,2870,2874,2878,2882,2886,2890,2894,2898,2902,2906],{"title":2867,"path":2868,"stem":2869},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":2871,"path":2872,"stem":2873},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":2875,"path":2876,"stem":2877},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":2879,"path":2880,"stem":2881},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":2883,"path":2884,"stem":2885},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":2887,"path":2888,"stem":2889},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":2891,"path":2892,"stem":2893},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":2895,"path":2896,"stem":2897},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":2899,"path":2900,"stem":2901},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":2903,"path":2904,"stem":2905},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":2907,"path":2908,"stem":2909},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":2911,"icon":943,"path":2912,"stem":2913,"children":2914,"page":59},"DDD","\u002Fddd","10.ddd",[2915,2919,2923,2927,2931,2935,2939,2943,2947,2951,2955,2959,2963],{"title":2916,"path":2917,"stem":2918},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":2920,"path":2921,"stem":2922},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":2924,"path":2925,"stem":2926},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":2928,"path":2929,"stem":2930},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":2932,"path":2933,"stem":2934},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":2936,"path":2937,"stem":2938},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":2940,"path":2941,"stem":2942},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":2944,"path":2945,"stem":2946},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":2948,"path":2949,"stem":2950},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":2952,"path":2953,"stem":2954},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":2956,"path":2957,"stem":2958},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":2960,"path":2961,"stem":2962},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":2964,"path":2965,"stem":2966},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":2968,"icon":2969,"path":2970,"stem":2971,"children":2972,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[2973,2977,2981,2985,2989,2993,2997],{"title":2974,"path":2975,"stem":2976},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":2978,"path":2979,"stem":2980},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":2982,"path":2983,"stem":2984},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":2986,"path":2987,"stem":2988},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":2990,"path":2991,"stem":2992},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":2994,"path":2995,"stem":2996},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":2998,"path":2999,"stem":3000},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3002,"icon":3003,"path":3004,"stem":3005,"children":3006,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3007,3011,3015,3019,3023,3027,3031,3035,3039,3043,3047,3051,3055,3059,3063,3067,3071,3075,3079,3083,3087,3091,3095,3099,3103,3107,3111,3115,3119,3123],{"title":3008,"path":3009,"stem":3010},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3012,"path":3013,"stem":3014},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3016,"path":3017,"stem":3018},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3020,"path":3021,"stem":3022},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3024,"path":3025,"stem":3026},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3028,"path":3029,"stem":3030},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3032,"path":3033,"stem":3034},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3036,"path":3037,"stem":3038},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3040,"path":3041,"stem":3042},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3044,"path":3045,"stem":3046},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3048,"path":3049,"stem":3050},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3052,"path":3053,"stem":3054},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3056,"path":3057,"stem":3058},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3060,"path":3061,"stem":3062},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3064,"path":3065,"stem":3066},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3068,"path":3069,"stem":3070},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3072,"path":3073,"stem":3074},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3076,"path":3077,"stem":3078},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3080,"path":3081,"stem":3082},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3084,"path":3085,"stem":3086},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3088,"path":3089,"stem":3090},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3092,"path":3093,"stem":3094},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3096,"path":3097,"stem":3098},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3100,"path":3101,"stem":3102},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3104,"path":3105,"stem":3106},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3108,"path":3109,"stem":3110},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3112,"path":3113,"stem":3114},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3116,"path":3117,"stem":3118},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3120,"path":3121,"stem":3122},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3124,"path":3125,"stem":3126},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3128,"path":3129,"stem":3130,"children":3131,"page":59},"AWS","\u002Faws","13.aws",[3132,3136,3140,3144,3148,3152,3156,3160,3164,3168,3172,3176,3180,3184,3188,3192,3196,3200],{"title":3133,"path":3134,"stem":3135},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3137,"path":3138,"stem":3139},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3141,"path":3142,"stem":3143},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3145,"path":3146,"stem":3147},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3149,"path":3150,"stem":3151},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3153,"path":3154,"stem":3155},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3157,"path":3158,"stem":3159},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3161,"path":3162,"stem":3163},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3165,"path":3166,"stem":3167},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3169,"path":3170,"stem":3171},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3173,"path":3174,"stem":3175},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3177,"path":3178,"stem":3179},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3181,"path":3182,"stem":3183},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3185,"path":3186,"stem":3187},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3189,"path":3190,"stem":3191},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3193,"path":3194,"stem":3195},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3197,"path":3198,"stem":3199},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3201,"path":3202,"stem":3203},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3205,"path":3206,"stem":3207,"children":3208,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[3209,3213,3217,3221,3225,3229,3233,3237,3241,3245,3249,3253],{"title":3210,"path":3211,"stem":3212},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":3214,"path":3215,"stem":3216},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":3218,"path":3219,"stem":3220},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":3222,"path":3223,"stem":3224},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":3226,"path":3227,"stem":3228},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":3230,"path":3231,"stem":3232},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":3234,"path":3235,"stem":3236},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":3238,"path":3239,"stem":3240},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":3242,"path":3243,"stem":3244},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":3246,"path":3247,"stem":3248},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":3250,"path":3251,"stem":3252},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":3254,"path":3255,"stem":3256},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":3258,"path":3259,"stem":3260},"Тестування компонентів діаграм","\u002Ftest-components","98.test-components",{"id":3262,"title":1885,"body":3263,"description":10633,"extension":10634,"links":10635,"meta":10636,"navigation":3321,"path":1886,"seo":10637,"stem":1887,"__hash__":10638},"docs\u002F02.cpp\u002F43.std-string-search.md",{"type":3264,"value":3265,"toc":10596},"minimark",[3266,3275,3280,3284,3617,3671,3677,3680,3687,3690,3708,3735,3754,3983,4021,4042,4044,4054,4062,4071,4382,4427,4434,4442,4735,4777,4779,4789,4802,5115,5179,5198,5200,5209,5221,5602,5644,5646,5650,5707,5709,5713,5717,5723,6073,6134,6141,6144,6506,6564,6571,6871,6913,6925,6938,7238,7291,7303,7310,7320,7760,7823,7825,7834,7842,8323,8373,8376,8448,8450,8454,8458,8472,8893,8900,8910,9407,9411,9432,10461,10463,10467,10580,10592],[3267,3268,3270,3271],"h1",{"id":3269},"пошук-у-stdstring","Пошук у ",[3272,3273,3274],"code",{},"std::string",[3276,3277,3279],"h2",{"id":3278},"три-задачі-одна-тема","Три задачі, одна тема",[3281,3282,3283],"p",{},"Погляньте на три типові запити:",[3285,3286,3293],"pre",{"className":3287,"code":3288,"filename":3289,"language":3290,"meta":3291,"style":3292},"language-cpp shiki shiki-themes light-plus dark-plus dark-plus","#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    string email   = \"user@example.com\";\n    string csv     = \"Alice,30,Kyiv\";\n    string config  = \"  timeout = 30  \";\n\n    \u002F\u002F 1. Чи є символ '@' у рядку?\n    bool hasAt = email.find('@') != string::npos;\n\n    \u002F\u002F 2. Де перша кома?\n    size_t comma = csv.find(',');\n\n    \u002F\u002F 3. Де починається перший «справжній» символ?\n    size_t start = config.find_first_not_of(\" \\t\");\n\n    cout \u003C\u003C \"hasAt:  \" \u003C\u003C boolalpha \u003C\u003C hasAt  \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C \"comma:  \" \u003C\u003C comma                    \u003C\u003C \"\\n\"; \u002F\u002F 5\n    cout \u003C\u003C \"start:  \" \u003C\u003C start                    \u003C\u003C \"\\n\"; \u002F\u002F 2\n\n    return 0;\n}\n","FindPuzzle.cpp","cpp","showLineNumbers","",[3272,3294,3295,3308,3316,3323,3341,3346,3359,3365,3376,3387,3398,3403,3410,3444,3449,3455,3479,3484,3490,3520,3525,3550,3572,3594,3599,3611],{"__ignoreMap":3292},[3296,3297,3300,3304],"span",{"class":3298,"line":3299},"line",1,[3296,3301,3303],{"class":3302},"s8xlr","#include",[3296,3305,3307],{"class":3306},"sbdoH"," \u003Ciostream>\n",[3296,3309,3311,3313],{"class":3298,"line":3310},2,[3296,3312,3303],{"class":3302},[3296,3314,3315],{"class":3306}," \u003Cstring>\n",[3296,3317,3319],{"class":3298,"line":3318},3,[3296,3320,3322],{"emptyLinePlaceholder":3321},true,"\n",[3296,3324,3326,3329,3333,3337],{"class":3298,"line":3325},4,[3296,3327,3328],{"class":3302},"using",[3296,3330,3332],{"class":3331},"su1O8"," namespace",[3296,3334,3336],{"class":3335},"sN1BT"," std",[3296,3338,3340],{"class":3339},"sHH4Y",";\n",[3296,3342,3344],{"class":3298,"line":3343},5,[3296,3345,3322],{"emptyLinePlaceholder":3321},[3296,3347,3349,3352,3356],{"class":3298,"line":3348},6,[3296,3350,3351],{"class":3331},"int",[3296,3353,3355],{"class":3354},"s8Opu"," main",[3296,3357,3358],{"class":3339},"()\n",[3296,3360,3362],{"class":3298,"line":3361},7,[3296,3363,3364],{"class":3339},"{\n",[3296,3366,3368,3371,3374],{"class":3298,"line":3367},8,[3296,3369,3370],{"class":3339},"    string email   = ",[3296,3372,3373],{"class":3306},"\"user@example.com\"",[3296,3375,3340],{"class":3339},[3296,3377,3379,3382,3385],{"class":3298,"line":3378},9,[3296,3380,3381],{"class":3339},"    string csv     = ",[3296,3383,3384],{"class":3306},"\"Alice,30,Kyiv\"",[3296,3386,3340],{"class":3339},[3296,3388,3390,3393,3396],{"class":3298,"line":3389},10,[3296,3391,3392],{"class":3339},"    string config  = ",[3296,3394,3395],{"class":3306},"\"  timeout = 30  \"",[3296,3397,3340],{"class":3339},[3296,3399,3401],{"class":3298,"line":3400},11,[3296,3402,3322],{"emptyLinePlaceholder":3321},[3296,3404,3406],{"class":3298,"line":3405},12,[3296,3407,3409],{"class":3408},"spJ8K","    \u002F\u002F 1. Чи є символ '@' у рядку?\n",[3296,3411,3413,3416,3419,3423,3426,3429,3432,3435,3438,3441],{"class":3298,"line":3412},13,[3296,3414,3415],{"class":3331},"    bool",[3296,3417,3418],{"class":3339}," hasAt = ",[3296,3420,3422],{"class":3421},"siwwj","email",[3296,3424,3425],{"class":3339},".",[3296,3427,3428],{"class":3354},"find",[3296,3430,3431],{"class":3339},"(",[3296,3433,3434],{"class":3306},"'@'",[3296,3436,3437],{"class":3339},") != ",[3296,3439,3440],{"class":3335},"string",[3296,3442,3443],{"class":3339},"::npos;\n",[3296,3445,3447],{"class":3298,"line":3446},14,[3296,3448,3322],{"emptyLinePlaceholder":3321},[3296,3450,3452],{"class":3298,"line":3451},15,[3296,3453,3454],{"class":3408},"    \u002F\u002F 2. Де перша кома?\n",[3296,3456,3458,3461,3464,3467,3469,3471,3473,3476],{"class":3298,"line":3457},16,[3296,3459,3460],{"class":3331},"    size_t",[3296,3462,3463],{"class":3339}," comma = ",[3296,3465,3466],{"class":3421},"csv",[3296,3468,3425],{"class":3339},[3296,3470,3428],{"class":3354},[3296,3472,3431],{"class":3339},[3296,3474,3475],{"class":3306},"','",[3296,3477,3478],{"class":3339},");\n",[3296,3480,3482],{"class":3298,"line":3481},17,[3296,3483,3322],{"emptyLinePlaceholder":3321},[3296,3485,3487],{"class":3298,"line":3486},18,[3296,3488,3489],{"class":3408},"    \u002F\u002F 3. Де починається перший «справжній» символ?\n",[3296,3491,3493,3495,3498,3501,3503,3506,3508,3511,3515,3518],{"class":3298,"line":3492},19,[3296,3494,3460],{"class":3331},[3296,3496,3497],{"class":3339}," start = ",[3296,3499,3500],{"class":3421},"config",[3296,3502,3425],{"class":3339},[3296,3504,3505],{"class":3354},"find_first_not_of",[3296,3507,3431],{"class":3339},[3296,3509,3510],{"class":3306},"\" ",[3296,3512,3514],{"class":3513},"sjcCO","\\t",[3296,3516,3517],{"class":3306},"\"",[3296,3519,3478],{"class":3339},[3296,3521,3523],{"class":3298,"line":3522},20,[3296,3524,3322],{"emptyLinePlaceholder":3321},[3296,3526,3528,3531,3534,3537,3539,3542,3544,3547],{"class":3298,"line":3527},21,[3296,3529,3530],{"class":3339},"    cout \u003C\u003C ",[3296,3532,3533],{"class":3306},"\"hasAt:  \"",[3296,3535,3536],{"class":3339}," \u003C\u003C boolalpha \u003C\u003C hasAt  \u003C\u003C ",[3296,3538,3517],{"class":3306},[3296,3540,3541],{"class":3513},"\\n",[3296,3543,3517],{"class":3306},[3296,3545,3546],{"class":3339},";",[3296,3548,3549],{"class":3408}," \u002F\u002F true\n",[3296,3551,3553,3555,3558,3561,3563,3565,3567,3569],{"class":3298,"line":3552},22,[3296,3554,3530],{"class":3339},[3296,3556,3557],{"class":3306},"\"comma:  \"",[3296,3559,3560],{"class":3339}," \u003C\u003C comma                    \u003C\u003C ",[3296,3562,3517],{"class":3306},[3296,3564,3541],{"class":3513},[3296,3566,3517],{"class":3306},[3296,3568,3546],{"class":3339},[3296,3570,3571],{"class":3408}," \u002F\u002F 5\n",[3296,3573,3575,3577,3580,3583,3585,3587,3589,3591],{"class":3298,"line":3574},23,[3296,3576,3530],{"class":3339},[3296,3578,3579],{"class":3306},"\"start:  \"",[3296,3581,3582],{"class":3339}," \u003C\u003C start                    \u003C\u003C ",[3296,3584,3517],{"class":3306},[3296,3586,3541],{"class":3513},[3296,3588,3517],{"class":3306},[3296,3590,3546],{"class":3339},[3296,3592,3593],{"class":3408}," \u002F\u002F 2\n",[3296,3595,3597],{"class":3298,"line":3596},24,[3296,3598,3322],{"emptyLinePlaceholder":3321},[3296,3600,3602,3605,3609],{"class":3298,"line":3601},25,[3296,3603,3604],{"class":3302},"    return",[3296,3606,3608],{"class":3607},"sJj4R"," 0",[3296,3610,3340],{"class":3339},[3296,3612,3614],{"class":3298,"line":3613},26,[3296,3615,3616],{"class":3339},"}\n",[3618,3619,3621,3637,3646,3655,3663],"terminal-preview",{"title":3620},".\u002FFindPuzzle",[3622,3623,3625,3630,3631],"div",{"className":3624},[3298],[3296,3626,3629],{"className":3627},[3628],"opacity-40","$"," ",[3632,3633,3636],"strong",{"className":3634},[3635],"font-bold",".\u002FSearchPuzzle",[3622,3638,3640,3641],{"className":3639},[3298],"hasAt:  ",[3296,3642,3645],{"className":3643},[3644,3635],"text-green-400","true",[3622,3647,3649,3650],{"className":3648},[3298],"comma:  ",[3296,3651,3654],{"className":3652},[3653],"text-blue-400","5",[3622,3656,3658,3659],{"className":3657},[3298],"start:  ",[3296,3660,3662],{"className":3661},[3653],"2",[3622,3664,3666,3667,3425],{"className":3665},[3298],"Execution finished with ",[3296,3668,3670],{"className":3669},[3644,3635],"exit code 0",[3281,3672,3673,3674,3676],{},"Три методи — три різних питання про рядок. У цій статті ми розберемо весь арсенал методів пошуку ",[3272,3675,3274],{}," та збудуємо з них корисні функції.",[3678,3679],"hr",{},[3276,3681,3683,3686],{"id":3682},"stdstringnpos-не-знайдено",[3272,3684,3685],{},"std::string::npos"," — «не знайдено»",[3281,3688,3689],{},"Перш ніж розглядати методи пошуку, необхідно зрозуміти значення, яке вони повертають при невдачі.",[3281,3691,3692,3693,3695,3696,3699,3700,3703,3704,3707],{},"Усі методи пошуку ",[3272,3694,3274],{}," повертають ",[3272,3697,3698],{},"std::string::size_type"," (що є псевдонімом ",[3272,3701,3702],{},"size_t"," — беззнакового цілого). Коли елемент ",[3632,3705,3706],{},"не знайдено",", вони повертають спеціальну константу:",[3285,3709,3711],{"className":3287,"code":3710,"language":3290,"meta":3292,"style":3292},"static constexpr size_type npos = static_cast\u003Csize_type>(-1);\n",[3272,3712,3713],{"__ignoreMap":3292},[3296,3714,3715,3718,3721,3724,3727,3730,3733],{"class":3298,"line":3299},[3296,3716,3717],{"class":3331},"static",[3296,3719,3720],{"class":3331}," constexpr",[3296,3722,3723],{"class":3339}," size_type npos = ",[3296,3725,3726],{"class":3331},"static_cast",[3296,3728,3729],{"class":3339},"\u003Csize_type>(-",[3296,3731,3732],{"class":3607},"1",[3296,3734,3478],{"class":3339},[3281,3736,3737,3738,3741,3742,3745,3746,3749,3750,3753],{},"Оскільки ",[3272,3739,3740],{},"size_type"," — беззнаковий тип, ",[3272,3743,3744],{},"-1"," перетворюється на ",[3272,3747,3748],{},"SIZE_MAX"," — найбільше можливе значення (зазвичай ",[3272,3751,3752],{},"18446744073709551615"," на 64-бітних системах). Це число значно більше за будь-який реальний розмір рядка, тому воно є безпечним «сигнальним» значенням.",[3285,3755,3758],{"className":3287,"code":3756,"filename":3757,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    string s = \"Hello, World!\";\n\n    size_t pos1 = s.find(\"World\");\n    size_t pos2 = s.find(\"xyz\");\n\n    cout \u003C\u003C \"npos = \" \u003C\u003C string::npos \u003C\u003C \"\\n\";\n\n    if (pos1 != string::npos)\n        cout \u003C\u003C \"\\\"World\\\" знайдено на позиції \" \u003C\u003C pos1 \u003C\u003C \"\\n\";\n\n    if (pos2 == string::npos)\n        cout \u003C\u003C \"\\\"xyz\\\" не знайдено\\n\";\n\n    return 0;\n}\n","NposExample.cpp",[3272,3759,3760,3766,3772,3776,3786,3790,3798,3802,3812,3816,3837,3857,3861,3884,3888,3901,3930,3934,3945,3967,3971,3979],{"__ignoreMap":3292},[3296,3761,3762,3764],{"class":3298,"line":3299},[3296,3763,3303],{"class":3302},[3296,3765,3307],{"class":3306},[3296,3767,3768,3770],{"class":3298,"line":3310},[3296,3769,3303],{"class":3302},[3296,3771,3315],{"class":3306},[3296,3773,3774],{"class":3298,"line":3318},[3296,3775,3322],{"emptyLinePlaceholder":3321},[3296,3777,3778,3780,3782,3784],{"class":3298,"line":3325},[3296,3779,3328],{"class":3302},[3296,3781,3332],{"class":3331},[3296,3783,3336],{"class":3335},[3296,3785,3340],{"class":3339},[3296,3787,3788],{"class":3298,"line":3343},[3296,3789,3322],{"emptyLinePlaceholder":3321},[3296,3791,3792,3794,3796],{"class":3298,"line":3348},[3296,3793,3351],{"class":3331},[3296,3795,3355],{"class":3354},[3296,3797,3358],{"class":3339},[3296,3799,3800],{"class":3298,"line":3361},[3296,3801,3364],{"class":3339},[3296,3803,3804,3807,3810],{"class":3298,"line":3367},[3296,3805,3806],{"class":3339},"    string s = ",[3296,3808,3809],{"class":3306},"\"Hello, World!\"",[3296,3811,3340],{"class":3339},[3296,3813,3814],{"class":3298,"line":3378},[3296,3815,3322],{"emptyLinePlaceholder":3321},[3296,3817,3818,3820,3823,3826,3828,3830,3832,3835],{"class":3298,"line":3389},[3296,3819,3460],{"class":3331},[3296,3821,3822],{"class":3339}," pos1 = ",[3296,3824,3825],{"class":3421},"s",[3296,3827,3425],{"class":3339},[3296,3829,3428],{"class":3354},[3296,3831,3431],{"class":3339},[3296,3833,3834],{"class":3306},"\"World\"",[3296,3836,3478],{"class":3339},[3296,3838,3839,3841,3844,3846,3848,3850,3852,3855],{"class":3298,"line":3400},[3296,3840,3460],{"class":3331},[3296,3842,3843],{"class":3339}," pos2 = ",[3296,3845,3825],{"class":3421},[3296,3847,3425],{"class":3339},[3296,3849,3428],{"class":3354},[3296,3851,3431],{"class":3339},[3296,3853,3854],{"class":3306},"\"xyz\"",[3296,3856,3478],{"class":3339},[3296,3858,3859],{"class":3298,"line":3405},[3296,3860,3322],{"emptyLinePlaceholder":3321},[3296,3862,3863,3865,3868,3871,3873,3876,3878,3880,3882],{"class":3298,"line":3412},[3296,3864,3530],{"class":3339},[3296,3866,3867],{"class":3306},"\"npos = \"",[3296,3869,3870],{"class":3339}," \u003C\u003C ",[3296,3872,3440],{"class":3335},[3296,3874,3875],{"class":3339},"::npos \u003C\u003C ",[3296,3877,3517],{"class":3306},[3296,3879,3541],{"class":3513},[3296,3881,3517],{"class":3306},[3296,3883,3340],{"class":3339},[3296,3885,3886],{"class":3298,"line":3446},[3296,3887,3322],{"emptyLinePlaceholder":3321},[3296,3889,3890,3893,3896,3898],{"class":3298,"line":3451},[3296,3891,3892],{"class":3302},"    if",[3296,3894,3895],{"class":3339}," (pos1 != ",[3296,3897,3440],{"class":3335},[3296,3899,3900],{"class":3339},"::npos)\n",[3296,3902,3903,3906,3908,3911,3914,3916,3919,3922,3924,3926,3928],{"class":3298,"line":3457},[3296,3904,3905],{"class":3339},"        cout \u003C\u003C ",[3296,3907,3517],{"class":3306},[3296,3909,3910],{"class":3513},"\\\"",[3296,3912,3913],{"class":3306},"World",[3296,3915,3910],{"class":3513},[3296,3917,3918],{"class":3306}," знайдено на позиції \"",[3296,3920,3921],{"class":3339}," \u003C\u003C pos1 \u003C\u003C ",[3296,3923,3517],{"class":3306},[3296,3925,3541],{"class":3513},[3296,3927,3517],{"class":3306},[3296,3929,3340],{"class":3339},[3296,3931,3932],{"class":3298,"line":3481},[3296,3933,3322],{"emptyLinePlaceholder":3321},[3296,3935,3936,3938,3941,3943],{"class":3298,"line":3486},[3296,3937,3892],{"class":3302},[3296,3939,3940],{"class":3339}," (pos2 == ",[3296,3942,3440],{"class":3335},[3296,3944,3900],{"class":3339},[3296,3946,3947,3949,3951,3953,3956,3958,3961,3963,3965],{"class":3298,"line":3492},[3296,3948,3905],{"class":3339},[3296,3950,3517],{"class":3306},[3296,3952,3910],{"class":3513},[3296,3954,3955],{"class":3306},"xyz",[3296,3957,3910],{"class":3513},[3296,3959,3960],{"class":3306}," не знайдено",[3296,3962,3541],{"class":3513},[3296,3964,3517],{"class":3306},[3296,3966,3340],{"class":3339},[3296,3968,3969],{"class":3298,"line":3522},[3296,3970,3322],{"emptyLinePlaceholder":3321},[3296,3972,3973,3975,3977],{"class":3298,"line":3527},[3296,3974,3604],{"class":3302},[3296,3976,3608],{"class":3607},[3296,3978,3340],{"class":3339},[3296,3980,3981],{"class":3298,"line":3552},[3296,3982,3616],{"class":3339},[3618,3984,3986,3996,4003,4011,4015],{"title":3985},".\u002FNposExample",[3622,3987,3989,3630,3992],{"className":3988},[3298],[3296,3990,3629],{"className":3991},[3628],[3632,3993,3995],{"className":3994},[3635],".\u002FNposDemo",[3622,3997,3999,4000],{"className":3998},[3298],"npos = ",[3296,4001,3752],{"className":4002},[3653],[3622,4004,4006,4007],{"className":4005},[3298],"\"World\" знайдено на позиції ",[3296,4008,4010],{"className":4009},[3653],"7",[3622,4012,4014],{"className":4013},[3298],"\"xyz\" не знайдено",[3622,4016,3666,4018,3425],{"className":4017},[3298],[3296,4019,3670],{"className":4020},[3644,3635],[4022,4023,4024,4025,4028,4029,4032,4033,4035,4036,4038,4039,3425],"warning",{},"Ніколи не перевіряйте результат пошуку через ",[3272,4026,4027],{},"pos >= 0"," чи ",[3272,4030,4031],{},"pos != -1"," — ",[3272,4034,3702],{}," беззнаковий, від'ємних значень не існує. Завжди порівнюйте з ",[3272,4037,3685],{},": ",[3272,4040,4041],{},"if (pos != std::string::npos)",[3678,4043],{},[3276,4045,4047,4048,4050,4051],{"id":4046},"методи-find-та-rfind","Методи ",[3272,4049,3428],{}," та ",[3272,4052,4053],{},"rfind",[4055,4056,4058,4061],"h3",{"id":4057},"find-пошук-першого-входження",[3272,4059,4060],{},".find()"," — пошук першого входження",[3281,4063,4064,4066,4067,4070],{},[3272,4065,4060],{}," шукає підрядок або символ зліва направо і повертає індекс ",[3632,4068,4069],{},"першого"," збігу:",[3285,4072,4075],{"className":3287,"code":4073,"filename":4074,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    string s = \"the cat sat on the mat\";\n\n    \u002F\u002F Знайти підрядок\n    size_t p1 = s.find(\"the\");\n    cout \u003C\u003C \"перше \\\"the\\\": \" \u003C\u003C p1 \u003C\u003C \"\\n\"; \u002F\u002F 0\n\n    \u002F\u002F Знайти символ\n    size_t p2 = s.find('a');\n    cout \u003C\u003C \"перша 'a':   \" \u003C\u003C p2 \u003C\u003C \"\\n\"; \u002F\u002F 5\n\n    \u002F\u002F Пошук починаючи з позиції (другий аргумент)\n    size_t p3 = s.find(\"the\", 1); \u002F\u002F пропустити позицію 0\n    cout \u003C\u003C \"\\\"the\\\" після позиції 1: \" \u003C\u003C p3 \u003C\u003C \"\\n\"; \u002F\u002F 15\n\n    \u002F\u002F Пошук підрядка, якого немає\n    size_t p4 = s.find(\"dog\");\n    if (p4 == string::npos)\n        cout \u003C\u003C \"\\\"dog\\\" не знайдено\\n\";\n\n    return 0;\n}\n","Find.cpp",[3272,4076,4077,4083,4089,4093,4103,4107,4115,4119,4128,4132,4137,4157,4188,4192,4197,4217,4237,4241,4246,4274,4303,4307,4312,4332,4343,4364,4368,4377],{"__ignoreMap":3292},[3296,4078,4079,4081],{"class":3298,"line":3299},[3296,4080,3303],{"class":3302},[3296,4082,3307],{"class":3306},[3296,4084,4085,4087],{"class":3298,"line":3310},[3296,4086,3303],{"class":3302},[3296,4088,3315],{"class":3306},[3296,4090,4091],{"class":3298,"line":3318},[3296,4092,3322],{"emptyLinePlaceholder":3321},[3296,4094,4095,4097,4099,4101],{"class":3298,"line":3325},[3296,4096,3328],{"class":3302},[3296,4098,3332],{"class":3331},[3296,4100,3336],{"class":3335},[3296,4102,3340],{"class":3339},[3296,4104,4105],{"class":3298,"line":3343},[3296,4106,3322],{"emptyLinePlaceholder":3321},[3296,4108,4109,4111,4113],{"class":3298,"line":3348},[3296,4110,3351],{"class":3331},[3296,4112,3355],{"class":3354},[3296,4114,3358],{"class":3339},[3296,4116,4117],{"class":3298,"line":3361},[3296,4118,3364],{"class":3339},[3296,4120,4121,4123,4126],{"class":3298,"line":3367},[3296,4122,3806],{"class":3339},[3296,4124,4125],{"class":3306},"\"the cat sat on the mat\"",[3296,4127,3340],{"class":3339},[3296,4129,4130],{"class":3298,"line":3378},[3296,4131,3322],{"emptyLinePlaceholder":3321},[3296,4133,4134],{"class":3298,"line":3389},[3296,4135,4136],{"class":3408},"    \u002F\u002F Знайти підрядок\n",[3296,4138,4139,4141,4144,4146,4148,4150,4152,4155],{"class":3298,"line":3400},[3296,4140,3460],{"class":3331},[3296,4142,4143],{"class":3339}," p1 = ",[3296,4145,3825],{"class":3421},[3296,4147,3425],{"class":3339},[3296,4149,3428],{"class":3354},[3296,4151,3431],{"class":3339},[3296,4153,4154],{"class":3306},"\"the\"",[3296,4156,3478],{"class":3339},[3296,4158,4159,4161,4164,4166,4169,4171,4174,4177,4179,4181,4183,4185],{"class":3298,"line":3405},[3296,4160,3530],{"class":3339},[3296,4162,4163],{"class":3306},"\"перше ",[3296,4165,3910],{"class":3513},[3296,4167,4168],{"class":3306},"the",[3296,4170,3910],{"class":3513},[3296,4172,4173],{"class":3306},": \"",[3296,4175,4176],{"class":3339}," \u003C\u003C p1 \u003C\u003C ",[3296,4178,3517],{"class":3306},[3296,4180,3541],{"class":3513},[3296,4182,3517],{"class":3306},[3296,4184,3546],{"class":3339},[3296,4186,4187],{"class":3408}," \u002F\u002F 0\n",[3296,4189,4190],{"class":3298,"line":3412},[3296,4191,3322],{"emptyLinePlaceholder":3321},[3296,4193,4194],{"class":3298,"line":3446},[3296,4195,4196],{"class":3408},"    \u002F\u002F Знайти символ\n",[3296,4198,4199,4201,4204,4206,4208,4210,4212,4215],{"class":3298,"line":3451},[3296,4200,3460],{"class":3331},[3296,4202,4203],{"class":3339}," p2 = ",[3296,4205,3825],{"class":3421},[3296,4207,3425],{"class":3339},[3296,4209,3428],{"class":3354},[3296,4211,3431],{"class":3339},[3296,4213,4214],{"class":3306},"'a'",[3296,4216,3478],{"class":3339},[3296,4218,4219,4221,4224,4227,4229,4231,4233,4235],{"class":3298,"line":3457},[3296,4220,3530],{"class":3339},[3296,4222,4223],{"class":3306},"\"перша 'a':   \"",[3296,4225,4226],{"class":3339}," \u003C\u003C p2 \u003C\u003C ",[3296,4228,3517],{"class":3306},[3296,4230,3541],{"class":3513},[3296,4232,3517],{"class":3306},[3296,4234,3546],{"class":3339},[3296,4236,3571],{"class":3408},[3296,4238,4239],{"class":3298,"line":3481},[3296,4240,3322],{"emptyLinePlaceholder":3321},[3296,4242,4243],{"class":3298,"line":3486},[3296,4244,4245],{"class":3408},"    \u002F\u002F Пошук починаючи з позиції (другий аргумент)\n",[3296,4247,4248,4250,4253,4255,4257,4259,4261,4263,4266,4268,4271],{"class":3298,"line":3492},[3296,4249,3460],{"class":3331},[3296,4251,4252],{"class":3339}," p3 = ",[3296,4254,3825],{"class":3421},[3296,4256,3425],{"class":3339},[3296,4258,3428],{"class":3354},[3296,4260,3431],{"class":3339},[3296,4262,4154],{"class":3306},[3296,4264,4265],{"class":3339},", ",[3296,4267,3732],{"class":3607},[3296,4269,4270],{"class":3339},");",[3296,4272,4273],{"class":3408}," \u002F\u002F пропустити позицію 0\n",[3296,4275,4276,4278,4280,4282,4284,4286,4289,4292,4294,4296,4298,4300],{"class":3298,"line":3522},[3296,4277,3530],{"class":3339},[3296,4279,3517],{"class":3306},[3296,4281,3910],{"class":3513},[3296,4283,4168],{"class":3306},[3296,4285,3910],{"class":3513},[3296,4287,4288],{"class":3306}," після позиції 1: \"",[3296,4290,4291],{"class":3339}," \u003C\u003C p3 \u003C\u003C ",[3296,4293,3517],{"class":3306},[3296,4295,3541],{"class":3513},[3296,4297,3517],{"class":3306},[3296,4299,3546],{"class":3339},[3296,4301,4302],{"class":3408}," \u002F\u002F 15\n",[3296,4304,4305],{"class":3298,"line":3527},[3296,4306,3322],{"emptyLinePlaceholder":3321},[3296,4308,4309],{"class":3298,"line":3552},[3296,4310,4311],{"class":3408},"    \u002F\u002F Пошук підрядка, якого немає\n",[3296,4313,4314,4316,4319,4321,4323,4325,4327,4330],{"class":3298,"line":3574},[3296,4315,3460],{"class":3331},[3296,4317,4318],{"class":3339}," p4 = ",[3296,4320,3825],{"class":3421},[3296,4322,3425],{"class":3339},[3296,4324,3428],{"class":3354},[3296,4326,3431],{"class":3339},[3296,4328,4329],{"class":3306},"\"dog\"",[3296,4331,3478],{"class":3339},[3296,4333,4334,4336,4339,4341],{"class":3298,"line":3596},[3296,4335,3892],{"class":3302},[3296,4337,4338],{"class":3339}," (p4 == ",[3296,4340,3440],{"class":3335},[3296,4342,3900],{"class":3339},[3296,4344,4345,4347,4349,4351,4354,4356,4358,4360,4362],{"class":3298,"line":3601},[3296,4346,3905],{"class":3339},[3296,4348,3517],{"class":3306},[3296,4350,3910],{"class":3513},[3296,4352,4353],{"class":3306},"dog",[3296,4355,3910],{"class":3513},[3296,4357,3960],{"class":3306},[3296,4359,3541],{"class":3513},[3296,4361,3517],{"class":3306},[3296,4363,3340],{"class":3339},[3296,4365,4366],{"class":3298,"line":3613},[3296,4367,3322],{"emptyLinePlaceholder":3321},[3296,4369,4371,4373,4375],{"class":3298,"line":4370},27,[3296,4372,3604],{"class":3302},[3296,4374,3608],{"class":3607},[3296,4376,3340],{"class":3339},[3296,4378,4380],{"class":3298,"line":4379},28,[3296,4381,3616],{"class":3339},[3618,4383,4385,4394,4402,4409,4417,4421],{"title":4384},".\u002FFind",[3622,4386,4388,3630,4391],{"className":4387},[3298],[3296,4389,3629],{"className":4390},[3628],[3632,4392,4384],{"className":4393},[3635],[3622,4395,4397,4398],{"className":4396},[3298],"перше \"the\": ",[3296,4399,4401],{"className":4400},[3653],"0",[3622,4403,4405,4406],{"className":4404},[3298],"перша 'a':   ",[3296,4407,3654],{"className":4408},[3653],[3622,4410,4412,4413],{"className":4411},[3298],"\"the\" після позиції 1: ",[3296,4414,4416],{"className":4415},[3653],"15",[3622,4418,4420],{"className":4419},[3298],"\"dog\" не знайдено",[3622,4422,3666,4424,3425],{"className":4423},[3298],[3296,4425,3670],{"className":4426},[3644,3635],[4055,4428,4430,4433],{"id":4429},"rfind-пошук-останнього-входження",[3272,4431,4432],{},".rfind()"," — пошук останнього входження",[3281,4435,4436,4438,4439,4070],{},[3272,4437,4432],{}," шукає справа наліво — повертає індекс ",[3632,4440,4441],{},"останнього",[3285,4443,4446],{"className":3287,"code":4444,"filename":4445,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    string path = \"\u002Fhome\u002Fuser\u002Fdocuments\u002Freport.2026.pdf\";\n\n    \u002F\u002F Остання крапка — початок розширення\n    size_t dot = path.rfind('.');\n    if (dot != string::npos)\n        cout \u003C\u003C \"Розширення: \" \u003C\u003C path.substr(dot + 1) \u003C\u003C \"\\n\"; \u002F\u002F pdf\n\n    \u002F\u002F Остання '\u002F' — початок імені файлу\n    size_t slash = path.rfind('\u002F');\n    if (slash != string::npos)\n        cout \u003C\u003C \"Файл: \" \u003C\u003C path.substr(slash + 1) \u003C\u003C \"\\n\";\n        \u002F\u002F report.2026.pdf\n\n    \u002F\u002F rfind з обмеженням позиції: шукати тільки до pos\n    size_t dot2 = path.rfind('.', dot - 1); \u002F\u002F попередня крапка\n    if (dot2 != string::npos)\n        cout \u003C\u003C \"Попередня крапка на: \" \u003C\u003C dot2 \u003C\u003C \"\\n\"; \u002F\u002F 31\n\n    return 0;\n}\n","Rfind.cpp",[3272,4447,4448,4454,4460,4464,4474,4478,4486,4490,4500,4504,4509,4530,4541,4576,4580,4585,4605,4616,4646,4651,4655,4660,4687,4698,4719,4723,4731],{"__ignoreMap":3292},[3296,4449,4450,4452],{"class":3298,"line":3299},[3296,4451,3303],{"class":3302},[3296,4453,3307],{"class":3306},[3296,4455,4456,4458],{"class":3298,"line":3310},[3296,4457,3303],{"class":3302},[3296,4459,3315],{"class":3306},[3296,4461,4462],{"class":3298,"line":3318},[3296,4463,3322],{"emptyLinePlaceholder":3321},[3296,4465,4466,4468,4470,4472],{"class":3298,"line":3325},[3296,4467,3328],{"class":3302},[3296,4469,3332],{"class":3331},[3296,4471,3336],{"class":3335},[3296,4473,3340],{"class":3339},[3296,4475,4476],{"class":3298,"line":3343},[3296,4477,3322],{"emptyLinePlaceholder":3321},[3296,4479,4480,4482,4484],{"class":3298,"line":3348},[3296,4481,3351],{"class":3331},[3296,4483,3355],{"class":3354},[3296,4485,3358],{"class":3339},[3296,4487,4488],{"class":3298,"line":3361},[3296,4489,3364],{"class":3339},[3296,4491,4492,4495,4498],{"class":3298,"line":3367},[3296,4493,4494],{"class":3339},"    string path = ",[3296,4496,4497],{"class":3306},"\"\u002Fhome\u002Fuser\u002Fdocuments\u002Freport.2026.pdf\"",[3296,4499,3340],{"class":3339},[3296,4501,4502],{"class":3298,"line":3378},[3296,4503,3322],{"emptyLinePlaceholder":3321},[3296,4505,4506],{"class":3298,"line":3389},[3296,4507,4508],{"class":3408},"    \u002F\u002F Остання крапка — початок розширення\n",[3296,4510,4511,4513,4516,4519,4521,4523,4525,4528],{"class":3298,"line":3400},[3296,4512,3460],{"class":3331},[3296,4514,4515],{"class":3339}," dot = ",[3296,4517,4518],{"class":3421},"path",[3296,4520,3425],{"class":3339},[3296,4522,4053],{"class":3354},[3296,4524,3431],{"class":3339},[3296,4526,4527],{"class":3306},"'.'",[3296,4529,3478],{"class":3339},[3296,4531,4532,4534,4537,4539],{"class":3298,"line":3405},[3296,4533,3892],{"class":3302},[3296,4535,4536],{"class":3339}," (dot != ",[3296,4538,3440],{"class":3335},[3296,4540,3900],{"class":3339},[3296,4542,4543,4545,4548,4550,4552,4554,4557,4560,4562,4565,4567,4569,4571,4573],{"class":3298,"line":3412},[3296,4544,3905],{"class":3339},[3296,4546,4547],{"class":3306},"\"Розширення: \"",[3296,4549,3870],{"class":3339},[3296,4551,4518],{"class":3421},[3296,4553,3425],{"class":3339},[3296,4555,4556],{"class":3354},"substr",[3296,4558,4559],{"class":3339},"(dot + ",[3296,4561,3732],{"class":3607},[3296,4563,4564],{"class":3339},") \u003C\u003C ",[3296,4566,3517],{"class":3306},[3296,4568,3541],{"class":3513},[3296,4570,3517],{"class":3306},[3296,4572,3546],{"class":3339},[3296,4574,4575],{"class":3408}," \u002F\u002F pdf\n",[3296,4577,4578],{"class":3298,"line":3446},[3296,4579,3322],{"emptyLinePlaceholder":3321},[3296,4581,4582],{"class":3298,"line":3451},[3296,4583,4584],{"class":3408},"    \u002F\u002F Остання '\u002F' — початок імені файлу\n",[3296,4586,4587,4589,4592,4594,4596,4598,4600,4603],{"class":3298,"line":3457},[3296,4588,3460],{"class":3331},[3296,4590,4591],{"class":3339}," slash = ",[3296,4593,4518],{"class":3421},[3296,4595,3425],{"class":3339},[3296,4597,4053],{"class":3354},[3296,4599,3431],{"class":3339},[3296,4601,4602],{"class":3306},"'\u002F'",[3296,4604,3478],{"class":3339},[3296,4606,4607,4609,4612,4614],{"class":3298,"line":3481},[3296,4608,3892],{"class":3302},[3296,4610,4611],{"class":3339}," (slash != ",[3296,4613,3440],{"class":3335},[3296,4615,3900],{"class":3339},[3296,4617,4618,4620,4623,4625,4627,4629,4631,4634,4636,4638,4640,4642,4644],{"class":3298,"line":3486},[3296,4619,3905],{"class":3339},[3296,4621,4622],{"class":3306},"\"Файл: \"",[3296,4624,3870],{"class":3339},[3296,4626,4518],{"class":3421},[3296,4628,3425],{"class":3339},[3296,4630,4556],{"class":3354},[3296,4632,4633],{"class":3339},"(slash + ",[3296,4635,3732],{"class":3607},[3296,4637,4564],{"class":3339},[3296,4639,3517],{"class":3306},[3296,4641,3541],{"class":3513},[3296,4643,3517],{"class":3306},[3296,4645,3340],{"class":3339},[3296,4647,4648],{"class":3298,"line":3492},[3296,4649,4650],{"class":3408},"        \u002F\u002F report.2026.pdf\n",[3296,4652,4653],{"class":3298,"line":3522},[3296,4654,3322],{"emptyLinePlaceholder":3321},[3296,4656,4657],{"class":3298,"line":3527},[3296,4658,4659],{"class":3408},"    \u002F\u002F rfind з обмеженням позиції: шукати тільки до pos\n",[3296,4661,4662,4664,4667,4669,4671,4673,4675,4677,4680,4682,4684],{"class":3298,"line":3552},[3296,4663,3460],{"class":3331},[3296,4665,4666],{"class":3339}," dot2 = ",[3296,4668,4518],{"class":3421},[3296,4670,3425],{"class":3339},[3296,4672,4053],{"class":3354},[3296,4674,3431],{"class":3339},[3296,4676,4527],{"class":3306},[3296,4678,4679],{"class":3339},", dot - ",[3296,4681,3732],{"class":3607},[3296,4683,4270],{"class":3339},[3296,4685,4686],{"class":3408}," \u002F\u002F попередня крапка\n",[3296,4688,4689,4691,4694,4696],{"class":3298,"line":3574},[3296,4690,3892],{"class":3302},[3296,4692,4693],{"class":3339}," (dot2 != ",[3296,4695,3440],{"class":3335},[3296,4697,3900],{"class":3339},[3296,4699,4700,4702,4705,4708,4710,4712,4714,4716],{"class":3298,"line":3596},[3296,4701,3905],{"class":3339},[3296,4703,4704],{"class":3306},"\"Попередня крапка на: \"",[3296,4706,4707],{"class":3339}," \u003C\u003C dot2 \u003C\u003C ",[3296,4709,3517],{"class":3306},[3296,4711,3541],{"class":3513},[3296,4713,3517],{"class":3306},[3296,4715,3546],{"class":3339},[3296,4717,4718],{"class":3408}," \u002F\u002F 31\n",[3296,4720,4721],{"class":3298,"line":3601},[3296,4722,3322],{"emptyLinePlaceholder":3321},[3296,4724,4725,4727,4729],{"class":3298,"line":3613},[3296,4726,3604],{"class":3302},[3296,4728,3608],{"class":3607},[3296,4730,3340],{"class":3339},[3296,4732,4733],{"class":3298,"line":4370},[3296,4734,3616],{"class":3339},[3618,4736,4738,4747,4755,4763,4771],{"title":4737},".\u002FRfind",[3622,4739,4741,3630,4744],{"className":4740},[3298],[3296,4742,3629],{"className":4743},[3628],[3632,4745,4737],{"className":4746},[3635],[3622,4748,4750,4751],{"className":4749},[3298],"Розширення: ",[3296,4752,4754],{"className":4753},[3653],"pdf",[3622,4756,4758,4759],{"className":4757},[3298],"Файл: ",[3296,4760,4762],{"className":4761},[3653],"report.2026.pdf",[3622,4764,4766,4767],{"className":4765},[3298],"Попередня крапка на: ",[3296,4768,4770],{"className":4769},[3653],"31",[3622,4772,3666,4774,3425],{"className":4773},[3298],[3296,4775,3670],{"className":4776},[3644,3635],[3678,4778],{},[3276,4780,4782,4783,4050,4786],{"id":4781},"пошук-за-набором-символів-find_first_of-та-find_last_of","Пошук за набором символів: ",[3272,4784,4785],{},"find_first_of",[3272,4787,4788],{},"find_last_of",[3281,4790,4791,4792,4794,4795,4797,4798,4801],{},"На відміну від ",[3272,4793,3428],{},", який шукає конкретний підрядок, ",[3272,4796,4785],{}," шукає перший символ, що ",[3632,4799,4800],{},"входить до вказаного набору",":",[3285,4803,4806],{"className":3287,"code":4804,"filename":4805,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    string s = \"Hello, World! 123\";\n\n    \u002F\u002F Перший символ із набору голосних\n    size_t p1 = s.find_first_of(\"aeiouAEIOU\");\n    cout \u003C\u003C \"Перша голосна: '\" \u003C\u003C s[p1] \u003C\u003C \"' на позиції \" \u003C\u003C p1 \u003C\u003C \"\\n\";\n    \u002F\u002F 'e' на позиції 1\n\n    \u002F\u002F Перший розділовий знак або пробіл\n    size_t p2 = s.find_first_of(\" ,!?.\");\n    cout \u003C\u003C \"Перший розділювач: '\" \u003C\u003C s[p2] \u003C\u003C \"' на позиції \" \u003C\u003C p2 \u003C\u003C \"\\n\";\n    \u002F\u002F ',' на позиції 5\n\n    \u002F\u002F Перша цифра\n    size_t p3 = s.find_first_of(\"0123456789\");\n    cout \u003C\u003C \"Перша цифра: '\" \u003C\u003C s[p3] \u003C\u003C \"' на позиції \" \u003C\u003C p3 \u003C\u003C \"\\n\";\n    \u002F\u002F '1' на позиції 14\n\n    \u002F\u002F Остання голосна\n    size_t p4 = s.find_last_of(\"aeiouAEIOU\");\n    cout \u003C\u003C \"Остання голосна: '\" \u003C\u003C s[p4] \u003C\u003C \"' на позиції \" \u003C\u003C p4 \u003C\u003C \"\\n\";\n    \u002F\u002F 'o' на позиції 8\n\n    return 0;\n}\n","FindFirstOf.cpp",[3272,4807,4808,4814,4820,4824,4834,4838,4846,4850,4859,4863,4868,4887,4914,4919,4923,4928,4947,4973,4978,4982,4987,5006,5032,5037,5041,5046,5064,5091,5096,5101,5110],{"__ignoreMap":3292},[3296,4809,4810,4812],{"class":3298,"line":3299},[3296,4811,3303],{"class":3302},[3296,4813,3307],{"class":3306},[3296,4815,4816,4818],{"class":3298,"line":3310},[3296,4817,3303],{"class":3302},[3296,4819,3315],{"class":3306},[3296,4821,4822],{"class":3298,"line":3318},[3296,4823,3322],{"emptyLinePlaceholder":3321},[3296,4825,4826,4828,4830,4832],{"class":3298,"line":3325},[3296,4827,3328],{"class":3302},[3296,4829,3332],{"class":3331},[3296,4831,3336],{"class":3335},[3296,4833,3340],{"class":3339},[3296,4835,4836],{"class":3298,"line":3343},[3296,4837,3322],{"emptyLinePlaceholder":3321},[3296,4839,4840,4842,4844],{"class":3298,"line":3348},[3296,4841,3351],{"class":3331},[3296,4843,3355],{"class":3354},[3296,4845,3358],{"class":3339},[3296,4847,4848],{"class":3298,"line":3361},[3296,4849,3364],{"class":3339},[3296,4851,4852,4854,4857],{"class":3298,"line":3367},[3296,4853,3806],{"class":3339},[3296,4855,4856],{"class":3306},"\"Hello, World! 123\"",[3296,4858,3340],{"class":3339},[3296,4860,4861],{"class":3298,"line":3378},[3296,4862,3322],{"emptyLinePlaceholder":3321},[3296,4864,4865],{"class":3298,"line":3389},[3296,4866,4867],{"class":3408},"    \u002F\u002F Перший символ із набору голосних\n",[3296,4869,4870,4872,4874,4876,4878,4880,4882,4885],{"class":3298,"line":3400},[3296,4871,3460],{"class":3331},[3296,4873,4143],{"class":3339},[3296,4875,3825],{"class":3421},[3296,4877,3425],{"class":3339},[3296,4879,4785],{"class":3354},[3296,4881,3431],{"class":3339},[3296,4883,4884],{"class":3306},"\"aeiouAEIOU\"",[3296,4886,3478],{"class":3339},[3296,4888,4889,4891,4894,4896,4898,4901,4904,4906,4908,4910,4912],{"class":3298,"line":3405},[3296,4890,3530],{"class":3339},[3296,4892,4893],{"class":3306},"\"Перша голосна: '\"",[3296,4895,3870],{"class":3339},[3296,4897,3825],{"class":3421},[3296,4899,4900],{"class":3339},"[p1] \u003C\u003C ",[3296,4902,4903],{"class":3306},"\"' на позиції \"",[3296,4905,4176],{"class":3339},[3296,4907,3517],{"class":3306},[3296,4909,3541],{"class":3513},[3296,4911,3517],{"class":3306},[3296,4913,3340],{"class":3339},[3296,4915,4916],{"class":3298,"line":3412},[3296,4917,4918],{"class":3408},"    \u002F\u002F 'e' на позиції 1\n",[3296,4920,4921],{"class":3298,"line":3446},[3296,4922,3322],{"emptyLinePlaceholder":3321},[3296,4924,4925],{"class":3298,"line":3451},[3296,4926,4927],{"class":3408},"    \u002F\u002F Перший розділовий знак або пробіл\n",[3296,4929,4930,4932,4934,4936,4938,4940,4942,4945],{"class":3298,"line":3457},[3296,4931,3460],{"class":3331},[3296,4933,4203],{"class":3339},[3296,4935,3825],{"class":3421},[3296,4937,3425],{"class":3339},[3296,4939,4785],{"class":3354},[3296,4941,3431],{"class":3339},[3296,4943,4944],{"class":3306},"\" ,!?.\"",[3296,4946,3478],{"class":3339},[3296,4948,4949,4951,4954,4956,4958,4961,4963,4965,4967,4969,4971],{"class":3298,"line":3481},[3296,4950,3530],{"class":3339},[3296,4952,4953],{"class":3306},"\"Перший розділювач: '\"",[3296,4955,3870],{"class":3339},[3296,4957,3825],{"class":3421},[3296,4959,4960],{"class":3339},"[p2] \u003C\u003C ",[3296,4962,4903],{"class":3306},[3296,4964,4226],{"class":3339},[3296,4966,3517],{"class":3306},[3296,4968,3541],{"class":3513},[3296,4970,3517],{"class":3306},[3296,4972,3340],{"class":3339},[3296,4974,4975],{"class":3298,"line":3486},[3296,4976,4977],{"class":3408},"    \u002F\u002F ',' на позиції 5\n",[3296,4979,4980],{"class":3298,"line":3492},[3296,4981,3322],{"emptyLinePlaceholder":3321},[3296,4983,4984],{"class":3298,"line":3522},[3296,4985,4986],{"class":3408},"    \u002F\u002F Перша цифра\n",[3296,4988,4989,4991,4993,4995,4997,4999,5001,5004],{"class":3298,"line":3527},[3296,4990,3460],{"class":3331},[3296,4992,4252],{"class":3339},[3296,4994,3825],{"class":3421},[3296,4996,3425],{"class":3339},[3296,4998,4785],{"class":3354},[3296,5000,3431],{"class":3339},[3296,5002,5003],{"class":3306},"\"0123456789\"",[3296,5005,3478],{"class":3339},[3296,5007,5008,5010,5013,5015,5017,5020,5022,5024,5026,5028,5030],{"class":3298,"line":3552},[3296,5009,3530],{"class":3339},[3296,5011,5012],{"class":3306},"\"Перша цифра: '\"",[3296,5014,3870],{"class":3339},[3296,5016,3825],{"class":3421},[3296,5018,5019],{"class":3339},"[p3] \u003C\u003C ",[3296,5021,4903],{"class":3306},[3296,5023,4291],{"class":3339},[3296,5025,3517],{"class":3306},[3296,5027,3541],{"class":3513},[3296,5029,3517],{"class":3306},[3296,5031,3340],{"class":3339},[3296,5033,5034],{"class":3298,"line":3574},[3296,5035,5036],{"class":3408},"    \u002F\u002F '1' на позиції 14\n",[3296,5038,5039],{"class":3298,"line":3596},[3296,5040,3322],{"emptyLinePlaceholder":3321},[3296,5042,5043],{"class":3298,"line":3601},[3296,5044,5045],{"class":3408},"    \u002F\u002F Остання голосна\n",[3296,5047,5048,5050,5052,5054,5056,5058,5060,5062],{"class":3298,"line":3613},[3296,5049,3460],{"class":3331},[3296,5051,4318],{"class":3339},[3296,5053,3825],{"class":3421},[3296,5055,3425],{"class":3339},[3296,5057,4788],{"class":3354},[3296,5059,3431],{"class":3339},[3296,5061,4884],{"class":3306},[3296,5063,3478],{"class":3339},[3296,5065,5066,5068,5071,5073,5075,5078,5080,5083,5085,5087,5089],{"class":3298,"line":4370},[3296,5067,3530],{"class":3339},[3296,5069,5070],{"class":3306},"\"Остання голосна: '\"",[3296,5072,3870],{"class":3339},[3296,5074,3825],{"class":3421},[3296,5076,5077],{"class":3339},"[p4] \u003C\u003C ",[3296,5079,4903],{"class":3306},[3296,5081,5082],{"class":3339}," \u003C\u003C p4 \u003C\u003C ",[3296,5084,3517],{"class":3306},[3296,5086,3541],{"class":3513},[3296,5088,3517],{"class":3306},[3296,5090,3340],{"class":3339},[3296,5092,5093],{"class":3298,"line":4379},[3296,5094,5095],{"class":3408},"    \u002F\u002F 'o' на позиції 8\n",[3296,5097,5099],{"class":3298,"line":5098},29,[3296,5100,3322],{"emptyLinePlaceholder":3321},[3296,5102,5104,5106,5108],{"class":3298,"line":5103},30,[3296,5105,3604],{"class":3302},[3296,5107,3608],{"class":3607},[3296,5109,3340],{"class":3339},[3296,5111,5113],{"class":3298,"line":5112},31,[3296,5114,3616],{"class":3339},[3618,5116,5118,5127,5139,5150,5161,5173],{"title":5117},".\u002FFindFirstOf",[3622,5119,5121,3630,5124],{"className":5120},[3298],[3296,5122,3629],{"className":5123},[3628],[3632,5125,5117],{"className":5126},[3635],[3622,5128,5130,5131,5135,5136],{"className":5129},[3298],"Перша голосна: '",[3296,5132,5134],{"className":5133},[3653],"e","' на позиції ",[3296,5137,3732],{"className":5138},[3653],[3622,5140,5142,5143,5135,5147],{"className":5141},[3298],"Перший розділювач: '",[3296,5144,5146],{"className":5145},[3653],",",[3296,5148,3654],{"className":5149},[3653],[3622,5151,5153,5154,5135,5157],{"className":5152},[3298],"Перша цифра: '",[3296,5155,3732],{"className":5156},[3653],[3296,5158,5160],{"className":5159},[3653],"14",[3622,5162,5164,5165,5135,5169],{"className":5163},[3298],"Остання голосна: '",[3296,5166,5168],{"className":5167},[3653],"o",[3296,5170,5172],{"className":5171},[3653],"8",[3622,5174,3666,5176,3425],{"className":5175},[3298],[3296,5177,3670],{"className":5178},[3644,3635],[5180,5181,5182,5183,5186,5187,5190,5191,5194,5195,3425],"note",{},"Рядок-аргумент у ",[3272,5184,5185],{},"find_first_of(\"aeiou\")"," — це ",[3632,5188,5189],{},"набір символів",", а не підрядок для пошуку. Метод шукає будь-який символ із цього набору, а не їх послідовність. Щоб знайти саме підрядок ",[3272,5192,5193],{},"\"ae\"",", використовуйте ",[3272,5196,5197],{},"find(\"ae\")",[3678,5199],{},[3276,5201,5203,5204,4050,5206],{"id":5202},"пошук-за-виключенням-find_first_not_of-та-find_last_not_of","Пошук за виключенням: ",[3272,5205,3505],{},[3272,5207,5208],{},"find_last_not_of",[3281,5210,4047,5211,5213,5214,5216,5217,5220],{},[3272,5212,3505],{}," \u002F ",[3272,5215,5208],{}," — дзеркальні: знаходять перший символ, що ",[3632,5218,5219],{},"не входить"," до вказаного набору:",[3285,5222,5225],{"className":3287,"code":5223,"filename":5224,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    \u002F\u002F Типовий приклад: trim — видалити пробіли з країв\n    string s = \"   Hello, World!   \";\n\n    size_t start = s.find_first_not_of(\" \\t\\r\\n\");\n    size_t end   = s.find_last_not_of(\" \\t\\r\\n\");\n\n    if (start == string::npos)\n    {\n        cout \u003C\u003C \"Рядок порожній або лише пробіли\\n\";\n    }\n    else\n    {\n        string trimmed = s.substr(start, end - start + 1);\n        cout \u003C\u003C \"'\" \u003C\u003C trimmed \u003C\u003C \"'\\n\"; \u002F\u002F 'Hello, World!'\n    }\n\n    \u002F\u002F Перевірка: чи рядок містить лише цифри?\n    string digits = \"12345\";\n    string mixed  = \"123abc\";\n\n    bool onlyDigits1 = digits.find_first_not_of(\"0123456789\") == string::npos;\n    bool onlyDigits2 = mixed.find_first_not_of(\"0123456789\") == string::npos;\n\n    cout \u003C\u003C boolalpha;\n    cout \u003C\u003C \"\\\"\" \u003C\u003C digits \u003C\u003C \"\\\" — лише цифри: \" \u003C\u003C onlyDigits1 \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C \"\\\"\" \u003C\u003C mixed  \u003C\u003C \"\\\" — лише цифри: \" \u003C\u003C onlyDigits2 \u003C\u003C \"\\n\"; \u002F\u002F false\n\n    return 0;\n}\n","FindFirstNotOf.cpp",[3272,5226,5227,5233,5239,5243,5253,5257,5265,5269,5274,5283,5287,5310,5333,5337,5348,5353,5366,5371,5376,5380,5398,5420,5424,5428,5433,5443,5453,5457,5482,5506,5510,5515,5549,5583,5588,5597],{"__ignoreMap":3292},[3296,5228,5229,5231],{"class":3298,"line":3299},[3296,5230,3303],{"class":3302},[3296,5232,3307],{"class":3306},[3296,5234,5235,5237],{"class":3298,"line":3310},[3296,5236,3303],{"class":3302},[3296,5238,3315],{"class":3306},[3296,5240,5241],{"class":3298,"line":3318},[3296,5242,3322],{"emptyLinePlaceholder":3321},[3296,5244,5245,5247,5249,5251],{"class":3298,"line":3325},[3296,5246,3328],{"class":3302},[3296,5248,3332],{"class":3331},[3296,5250,3336],{"class":3335},[3296,5252,3340],{"class":3339},[3296,5254,5255],{"class":3298,"line":3343},[3296,5256,3322],{"emptyLinePlaceholder":3321},[3296,5258,5259,5261,5263],{"class":3298,"line":3348},[3296,5260,3351],{"class":3331},[3296,5262,3355],{"class":3354},[3296,5264,3358],{"class":3339},[3296,5266,5267],{"class":3298,"line":3361},[3296,5268,3364],{"class":3339},[3296,5270,5271],{"class":3298,"line":3367},[3296,5272,5273],{"class":3408},"    \u002F\u002F Типовий приклад: trim — видалити пробіли з країв\n",[3296,5275,5276,5278,5281],{"class":3298,"line":3378},[3296,5277,3806],{"class":3339},[3296,5279,5280],{"class":3306},"\"   Hello, World!   \"",[3296,5282,3340],{"class":3339},[3296,5284,5285],{"class":3298,"line":3389},[3296,5286,3322],{"emptyLinePlaceholder":3321},[3296,5288,5289,5291,5293,5295,5297,5299,5301,5303,5306,5308],{"class":3298,"line":3400},[3296,5290,3460],{"class":3331},[3296,5292,3497],{"class":3339},[3296,5294,3825],{"class":3421},[3296,5296,3425],{"class":3339},[3296,5298,3505],{"class":3354},[3296,5300,3431],{"class":3339},[3296,5302,3510],{"class":3306},[3296,5304,5305],{"class":3513},"\\t\\r\\n",[3296,5307,3517],{"class":3306},[3296,5309,3478],{"class":3339},[3296,5311,5312,5314,5317,5319,5321,5323,5325,5327,5329,5331],{"class":3298,"line":3405},[3296,5313,3460],{"class":3331},[3296,5315,5316],{"class":3339}," end   = ",[3296,5318,3825],{"class":3421},[3296,5320,3425],{"class":3339},[3296,5322,5208],{"class":3354},[3296,5324,3431],{"class":3339},[3296,5326,3510],{"class":3306},[3296,5328,5305],{"class":3513},[3296,5330,3517],{"class":3306},[3296,5332,3478],{"class":3339},[3296,5334,5335],{"class":3298,"line":3412},[3296,5336,3322],{"emptyLinePlaceholder":3321},[3296,5338,5339,5341,5344,5346],{"class":3298,"line":3446},[3296,5340,3892],{"class":3302},[3296,5342,5343],{"class":3339}," (start == ",[3296,5345,3440],{"class":3335},[3296,5347,3900],{"class":3339},[3296,5349,5350],{"class":3298,"line":3451},[3296,5351,5352],{"class":3339},"    {\n",[3296,5354,5355,5357,5360,5362,5364],{"class":3298,"line":3457},[3296,5356,3905],{"class":3339},[3296,5358,5359],{"class":3306},"\"Рядок порожній або лише пробіли",[3296,5361,3541],{"class":3513},[3296,5363,3517],{"class":3306},[3296,5365,3340],{"class":3339},[3296,5367,5368],{"class":3298,"line":3481},[3296,5369,5370],{"class":3339},"    }\n",[3296,5372,5373],{"class":3298,"line":3486},[3296,5374,5375],{"class":3302},"    else\n",[3296,5377,5378],{"class":3298,"line":3492},[3296,5379,5352],{"class":3339},[3296,5381,5382,5385,5387,5389,5391,5394,5396],{"class":3298,"line":3522},[3296,5383,5384],{"class":3339},"        string trimmed = ",[3296,5386,3825],{"class":3421},[3296,5388,3425],{"class":3339},[3296,5390,4556],{"class":3354},[3296,5392,5393],{"class":3339},"(start, end - start + ",[3296,5395,3732],{"class":3607},[3296,5397,3478],{"class":3339},[3296,5399,5400,5402,5405,5408,5411,5413,5415,5417],{"class":3298,"line":3527},[3296,5401,3905],{"class":3339},[3296,5403,5404],{"class":3306},"\"'\"",[3296,5406,5407],{"class":3339}," \u003C\u003C trimmed \u003C\u003C ",[3296,5409,5410],{"class":3306},"\"'",[3296,5412,3541],{"class":3513},[3296,5414,3517],{"class":3306},[3296,5416,3546],{"class":3339},[3296,5418,5419],{"class":3408}," \u002F\u002F 'Hello, World!'\n",[3296,5421,5422],{"class":3298,"line":3552},[3296,5423,5370],{"class":3339},[3296,5425,5426],{"class":3298,"line":3574},[3296,5427,3322],{"emptyLinePlaceholder":3321},[3296,5429,5430],{"class":3298,"line":3596},[3296,5431,5432],{"class":3408},"    \u002F\u002F Перевірка: чи рядок містить лише цифри?\n",[3296,5434,5435,5438,5441],{"class":3298,"line":3601},[3296,5436,5437],{"class":3339},"    string digits = ",[3296,5439,5440],{"class":3306},"\"12345\"",[3296,5442,3340],{"class":3339},[3296,5444,5445,5448,5451],{"class":3298,"line":3613},[3296,5446,5447],{"class":3339},"    string mixed  = ",[3296,5449,5450],{"class":3306},"\"123abc\"",[3296,5452,3340],{"class":3339},[3296,5454,5455],{"class":3298,"line":4370},[3296,5456,3322],{"emptyLinePlaceholder":3321},[3296,5458,5459,5461,5464,5467,5469,5471,5473,5475,5478,5480],{"class":3298,"line":4379},[3296,5460,3415],{"class":3331},[3296,5462,5463],{"class":3339}," onlyDigits1 = ",[3296,5465,5466],{"class":3421},"digits",[3296,5468,3425],{"class":3339},[3296,5470,3505],{"class":3354},[3296,5472,3431],{"class":3339},[3296,5474,5003],{"class":3306},[3296,5476,5477],{"class":3339},") == ",[3296,5479,3440],{"class":3335},[3296,5481,3443],{"class":3339},[3296,5483,5484,5486,5489,5492,5494,5496,5498,5500,5502,5504],{"class":3298,"line":5098},[3296,5485,3415],{"class":3331},[3296,5487,5488],{"class":3339}," onlyDigits2 = ",[3296,5490,5491],{"class":3421},"mixed",[3296,5493,3425],{"class":3339},[3296,5495,3505],{"class":3354},[3296,5497,3431],{"class":3339},[3296,5499,5003],{"class":3306},[3296,5501,5477],{"class":3339},[3296,5503,3440],{"class":3335},[3296,5505,3443],{"class":3339},[3296,5507,5508],{"class":3298,"line":5103},[3296,5509,3322],{"emptyLinePlaceholder":3321},[3296,5511,5512],{"class":3298,"line":5112},[3296,5513,5514],{"class":3339},"    cout \u003C\u003C boolalpha;\n",[3296,5516,5518,5520,5522,5524,5526,5529,5531,5533,5536,5539,5541,5543,5545,5547],{"class":3298,"line":5517},32,[3296,5519,3530],{"class":3339},[3296,5521,3517],{"class":3306},[3296,5523,3910],{"class":3513},[3296,5525,3517],{"class":3306},[3296,5527,5528],{"class":3339}," \u003C\u003C digits \u003C\u003C ",[3296,5530,3517],{"class":3306},[3296,5532,3910],{"class":3513},[3296,5534,5535],{"class":3306}," — лише цифри: \"",[3296,5537,5538],{"class":3339}," \u003C\u003C onlyDigits1 \u003C\u003C ",[3296,5540,3517],{"class":3306},[3296,5542,3541],{"class":3513},[3296,5544,3517],{"class":3306},[3296,5546,3546],{"class":3339},[3296,5548,3549],{"class":3408},[3296,5550,5552,5554,5556,5558,5560,5563,5565,5567,5569,5572,5574,5576,5578,5580],{"class":3298,"line":5551},33,[3296,5553,3530],{"class":3339},[3296,5555,3517],{"class":3306},[3296,5557,3910],{"class":3513},[3296,5559,3517],{"class":3306},[3296,5561,5562],{"class":3339}," \u003C\u003C mixed  \u003C\u003C ",[3296,5564,3517],{"class":3306},[3296,5566,3910],{"class":3513},[3296,5568,5535],{"class":3306},[3296,5570,5571],{"class":3339}," \u003C\u003C onlyDigits2 \u003C\u003C ",[3296,5573,3517],{"class":3306},[3296,5575,3541],{"class":3513},[3296,5577,3517],{"class":3306},[3296,5579,3546],{"class":3339},[3296,5581,5582],{"class":3408}," \u002F\u002F false\n",[3296,5584,5586],{"class":3298,"line":5585},34,[3296,5587,3322],{"emptyLinePlaceholder":3321},[3296,5589,5591,5593,5595],{"class":3298,"line":5590},35,[3296,5592,3604],{"class":3302},[3296,5594,3608],{"class":3607},[3296,5596,3340],{"class":3339},[3296,5598,5600],{"class":3298,"line":5599},36,[3296,5601,3616],{"class":3339},[3618,5603,5605,5614,5622,5629,5638],{"title":5604},".\u002FFindFirstNotOf",[3622,5606,5608,3630,5611],{"className":5607},[3298],[3296,5609,3629],{"className":5610},[3628],[3632,5612,5604],{"className":5613},[3635],[3622,5615,5617,5618,5617],{"className":5616},[3298],"'",[3296,5619,5621],{"className":5620},[3653],"Hello, World!",[3622,5623,5625,5626],{"className":5624},[3298],"\"12345\" — лише цифри: ",[3296,5627,3645],{"className":5628},[3644,3635],[3622,5630,5632,5633],{"className":5631},[3298],"\"123abc\" — лише цифри: ",[3296,5634,5637],{"className":5635},[5636],"text-red-400","false",[3622,5639,3666,5641,3425],{"className":5640},[3298],[3296,5642,3670],{"className":5643},[3644,3635],[3678,5645],{},[3276,5647,5649],{"id":5648},"зведена-таблиця-методів-пошуку","Зведена таблиця методів пошуку",[5651,5652,5653,5666,5674,5682,5688,5698],"field-group",{},[5654,5655,5657,5658,5661,5662,5665],"field",{"name":5656,"type":3702},"s.find(what, pos=0)","Перше входження підрядка або символу, починаючи з ",[3272,5659,5660],{},"pos",". Повертає ",[3272,5663,5664],{},"npos"," якщо не знайдено.",[5654,5667,5669,5670,5661,5672,5665],{"name":5668,"type":3702},"s.rfind(what, pos=npos)","Останнє входження підрядка або символу, шукаючи назад від ",[3272,5671,5660],{},[3272,5673,5664],{},[5654,5675,5677,5678,5681],{"name":5676,"type":3702},"s.find_first_of(chars, pos=0)","Перший символ, що входить до набору ",[3272,5679,5680],{},"chars",". Корисно для пошуку будь-якого роздільника.",[5654,5683,5685,5686,3425],{"name":5684,"type":3702},"s.find_last_of(chars, pos=npos)","Останній символ, що входить до набору ",[3272,5687,5680],{},[5654,5689,5691,5692,5694,5695,5697],{"name":5690,"type":3702},"s.find_first_not_of(chars, pos=0)","Перший символ, що ",[3632,5693,5219],{}," до набору ",[3272,5696,5680],{},". Класичне використання — trim зліва.",[5654,5699,5701,5702,5694,5704,5706],{"name":5700,"type":3702},"s.find_last_not_of(chars, pos=npos)","Останній символ, що ",[3632,5703,5219],{},[3272,5705,5680],{},". Класичне використання — trim справа.",[3678,5708],{},[3276,5710,5712],{"id":5711},"практичні-патерни","Практичні патерни",[4055,5714,5716],{"id":5715},"знайти-всі-входження-підрядка","Знайти всі входження підрядка",[3281,5718,5719,5720,4801],{},"Щоб знайти всі позиції входження підрядка, використовується цикл з ",[3272,5721,5722],{},"find(..., lastPos + length)",[3285,5724,5727],{"className":3287,"code":5725,"filename":5726,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nusing namespace std;\n\nvector\u003Csize_t> findAll(const string& s, const string& sub)\n{\n    vector\u003Csize_t> positions;\n    size_t pos = 0;\n\n    while ((pos = s.find(sub, pos)) != string::npos)\n    {\n        positions.push_back(pos);\n        pos += sub.length(); \u002F\u002F рухаємось далі, щоб не зависнути на тому ж місці\n    }\n\n    return positions;\n}\n\nint main()\n{\n    string text = \"the cat sat on the mat near the hat\";\n    vector\u003Csize_t> positions = findAll(text, \"the\");\n\n    cout \u003C\u003C \"\\\"the\\\" знайдено \" \u003C\u003C positions.size() \u003C\u003C \" разів:\\n\";\n    for (size_t p : positions)\n        cout \u003C\u003C \"  позиція \" \u003C\u003C p \u003C\u003C \": \\\"\" \u003C\u003C text.substr(p, 10) \u003C\u003C \"...\\\"\\n\";\n\n    return 0;\n}\n","FindAllOccurrences.cpp",[3272,5728,5729,5735,5741,5748,5752,5762,5766,5810,5814,5824,5835,5839,5860,5864,5877,5896,5900,5904,5911,5915,5919,5927,5931,5941,5959,5963,6000,6013,6057,6061,6069],{"__ignoreMap":3292},[3296,5730,5731,5733],{"class":3298,"line":3299},[3296,5732,3303],{"class":3302},[3296,5734,3307],{"class":3306},[3296,5736,5737,5739],{"class":3298,"line":3310},[3296,5738,3303],{"class":3302},[3296,5740,3315],{"class":3306},[3296,5742,5743,5745],{"class":3298,"line":3318},[3296,5744,3303],{"class":3302},[3296,5746,5747],{"class":3306}," \u003Cvector>\n",[3296,5749,5750],{"class":3298,"line":3325},[3296,5751,3322],{"emptyLinePlaceholder":3321},[3296,5753,5754,5756,5758,5760],{"class":3298,"line":3343},[3296,5755,3328],{"class":3302},[3296,5757,3332],{"class":3331},[3296,5759,3336],{"class":3335},[3296,5761,3340],{"class":3339},[3296,5763,5764],{"class":3298,"line":3348},[3296,5765,3322],{"emptyLinePlaceholder":3321},[3296,5767,5768,5771,5774,5776,5779,5782,5784,5787,5790,5793,5796,5798,5800,5802,5804,5807],{"class":3298,"line":3361},[3296,5769,5770],{"class":3335},"vector",[3296,5772,5773],{"class":3339},"\u003C",[3296,5775,3702],{"class":3331},[3296,5777,5778],{"class":3339},"> ",[3296,5780,5781],{"class":3354},"findAll",[3296,5783,3431],{"class":3339},[3296,5785,5786],{"class":3331},"const",[3296,5788,5789],{"class":3335}," string",[3296,5791,5792],{"class":3331},"&",[3296,5794,5795],{"class":3421}," s",[3296,5797,4265],{"class":3339},[3296,5799,5786],{"class":3331},[3296,5801,5789],{"class":3335},[3296,5803,5792],{"class":3331},[3296,5805,5806],{"class":3421}," sub",[3296,5808,5809],{"class":3339},")\n",[3296,5811,5812],{"class":3298,"line":3367},[3296,5813,3364],{"class":3339},[3296,5815,5816,5819,5821],{"class":3298,"line":3378},[3296,5817,5818],{"class":3339},"    vector\u003C",[3296,5820,3702],{"class":3331},[3296,5822,5823],{"class":3339},"> positions;\n",[3296,5825,5826,5828,5831,5833],{"class":3298,"line":3389},[3296,5827,3460],{"class":3331},[3296,5829,5830],{"class":3339}," pos = ",[3296,5832,4401],{"class":3607},[3296,5834,3340],{"class":3339},[3296,5836,5837],{"class":3298,"line":3400},[3296,5838,3322],{"emptyLinePlaceholder":3321},[3296,5840,5841,5844,5847,5849,5851,5853,5856,5858],{"class":3298,"line":3405},[3296,5842,5843],{"class":3302},"    while",[3296,5845,5846],{"class":3339}," ((pos = ",[3296,5848,3825],{"class":3421},[3296,5850,3425],{"class":3339},[3296,5852,3428],{"class":3354},[3296,5854,5855],{"class":3339},"(sub, pos)) != ",[3296,5857,3440],{"class":3335},[3296,5859,3900],{"class":3339},[3296,5861,5862],{"class":3298,"line":3412},[3296,5863,5352],{"class":3339},[3296,5865,5866,5869,5871,5874],{"class":3298,"line":3446},[3296,5867,5868],{"class":3421},"        positions",[3296,5870,3425],{"class":3339},[3296,5872,5873],{"class":3354},"push_back",[3296,5875,5876],{"class":3339},"(pos);\n",[3296,5878,5879,5882,5885,5887,5890,5893],{"class":3298,"line":3451},[3296,5880,5881],{"class":3339},"        pos += ",[3296,5883,5884],{"class":3421},"sub",[3296,5886,3425],{"class":3339},[3296,5888,5889],{"class":3354},"length",[3296,5891,5892],{"class":3339},"();",[3296,5894,5895],{"class":3408}," \u002F\u002F рухаємось далі, щоб не зависнути на тому ж місці\n",[3296,5897,5898],{"class":3298,"line":3457},[3296,5899,5370],{"class":3339},[3296,5901,5902],{"class":3298,"line":3481},[3296,5903,3322],{"emptyLinePlaceholder":3321},[3296,5905,5906,5908],{"class":3298,"line":3486},[3296,5907,3604],{"class":3302},[3296,5909,5910],{"class":3339}," positions;\n",[3296,5912,5913],{"class":3298,"line":3492},[3296,5914,3616],{"class":3339},[3296,5916,5917],{"class":3298,"line":3522},[3296,5918,3322],{"emptyLinePlaceholder":3321},[3296,5920,5921,5923,5925],{"class":3298,"line":3527},[3296,5922,3351],{"class":3331},[3296,5924,3355],{"class":3354},[3296,5926,3358],{"class":3339},[3296,5928,5929],{"class":3298,"line":3552},[3296,5930,3364],{"class":3339},[3296,5932,5933,5936,5939],{"class":3298,"line":3574},[3296,5934,5935],{"class":3339},"    string text = ",[3296,5937,5938],{"class":3306},"\"the cat sat on the mat near the hat\"",[3296,5940,3340],{"class":3339},[3296,5942,5943,5945,5947,5950,5952,5955,5957],{"class":3298,"line":3596},[3296,5944,5818],{"class":3339},[3296,5946,3702],{"class":3331},[3296,5948,5949],{"class":3339},"> positions = ",[3296,5951,5781],{"class":3354},[3296,5953,5954],{"class":3339},"(text, ",[3296,5956,4154],{"class":3306},[3296,5958,3478],{"class":3339},[3296,5960,5961],{"class":3298,"line":3601},[3296,5962,3322],{"emptyLinePlaceholder":3321},[3296,5964,5965,5967,5969,5971,5973,5975,5978,5980,5983,5985,5988,5991,5994,5996,5998],{"class":3298,"line":3613},[3296,5966,3530],{"class":3339},[3296,5968,3517],{"class":3306},[3296,5970,3910],{"class":3513},[3296,5972,4168],{"class":3306},[3296,5974,3910],{"class":3513},[3296,5976,5977],{"class":3306}," знайдено \"",[3296,5979,3870],{"class":3339},[3296,5981,5982],{"class":3421},"positions",[3296,5984,3425],{"class":3339},[3296,5986,5987],{"class":3354},"size",[3296,5989,5990],{"class":3339},"() \u003C\u003C ",[3296,5992,5993],{"class":3306},"\" разів:",[3296,5995,3541],{"class":3513},[3296,5997,3517],{"class":3306},[3296,5999,3340],{"class":3339},[3296,6001,6002,6005,6008,6010],{"class":3298,"line":4370},[3296,6003,6004],{"class":3302},"    for",[3296,6006,6007],{"class":3339}," (",[3296,6009,3702],{"class":3331},[3296,6011,6012],{"class":3339}," p : positions)\n",[3296,6014,6015,6017,6020,6023,6026,6028,6030,6032,6035,6037,6039,6042,6045,6047,6050,6053,6055],{"class":3298,"line":4379},[3296,6016,3905],{"class":3339},[3296,6018,6019],{"class":3306},"\"  позиція \"",[3296,6021,6022],{"class":3339}," \u003C\u003C p \u003C\u003C ",[3296,6024,6025],{"class":3306},"\": ",[3296,6027,3910],{"class":3513},[3296,6029,3517],{"class":3306},[3296,6031,3870],{"class":3339},[3296,6033,6034],{"class":3421},"text",[3296,6036,3425],{"class":3339},[3296,6038,4556],{"class":3354},[3296,6040,6041],{"class":3339},"(p, ",[3296,6043,6044],{"class":3607},"10",[3296,6046,4564],{"class":3339},[3296,6048,6049],{"class":3306},"\"...",[3296,6051,6052],{"class":3513},"\\\"\\n",[3296,6054,3517],{"class":3306},[3296,6056,3340],{"class":3339},[3296,6058,6059],{"class":3298,"line":5098},[3296,6060,3322],{"emptyLinePlaceholder":3321},[3296,6062,6063,6065,6067],{"class":3298,"line":5103},[3296,6064,3604],{"class":3302},[3296,6066,3608],{"class":3607},[3296,6068,3340],{"class":3339},[3296,6070,6071],{"class":3298,"line":5112},[3296,6072,3616],{"class":3339},[3618,6074,6076,6086,6095,6107,6117,6128],{"title":6075},".\u002FFindAllOccurrences",[3622,6077,6079,3630,6082],{"className":6078},[3298],[3296,6080,3629],{"className":6081},[3628],[3632,6083,6085],{"className":6084},[3635],".\u002FFindAll",[3622,6087,6089,6090,6094],{"className":6088},[3298],"\"the\" знайдено ",[3296,6091,6093],{"className":6092},[3653],"3"," разів:",[3622,6096,6098,6099,4173,6102,6106],{"className":6097},[3298],"  позиція ",[3296,6100,4401],{"className":6101},[3653],[3296,6103,6105],{"className":6104},[3653],"the cat sa","...\"",[3622,6108,6098,6110,4173,6113,6106],{"className":6109},[3298],[3296,6111,4416],{"className":6112},[3653],[3296,6114,6116],{"className":6115},[3653],"the mat ne",[3622,6118,6098,6120,4173,6124,6106],{"className":6119},[3298],[3296,6121,6123],{"className":6122},[3653],"27",[3296,6125,6127],{"className":6126},[3653],"the hat",[3622,6129,3666,6131,3425],{"className":6130},[3298],[3296,6132,3670],{"className":6133},[3644,3635],[4055,6135,6137,6138],{"id":6136},"розбиття-рядка-split","Розбиття рядка: ",[3272,6139,6140],{},"split",[3281,6142,6143],{},"Один із найпоширеніших патернів — розбиття рядка за роздільником:",[3285,6145,6148],{"className":3287,"code":6146,"filename":6147,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nusing namespace std;\n\nvector\u003Cstring> split(const string& s, char delimiter)\n{\n    vector\u003Cstring> tokens;\n    size_t start = 0;\n    size_t pos   = s.find(delimiter);\n\n    while (pos != string::npos)\n    {\n        tokens.push_back(s.substr(start, pos - start));\n        start = pos + 1;\n        pos   = s.find(delimiter, start);\n    }\n\n    \u002F\u002F Не забути останній токен (після останнього роздільника)\n    tokens.push_back(s.substr(start));\n\n    return tokens;\n}\n\nint main()\n{\n    string csv = \"Alice,30,Kyiv,Ukraine\";\n    vector\u003Cstring> fields = split(csv, ',');\n\n    cout \u003C\u003C \"Полів: \" \u003C\u003C fields.size() \u003C\u003C \"\\n\";\n    for (size_t i = 0; i \u003C fields.size(); ++i)\n        cout \u003C\u003C \"  [\" \u003C\u003C i \u003C\u003C \"] = \\\"\" \u003C\u003C fields[i] \u003C\u003C \"\\\"\\n\";\n\n    return 0;\n}\n","Split.cpp",[3272,6149,6150,6156,6162,6168,6172,6182,6186,6218,6222,6227,6237,6253,6257,6268,6272,6292,6301,6315,6319,6323,6328,6348,6352,6359,6363,6367,6375,6379,6389,6403,6407,6433,6458,6490,6494,6502],{"__ignoreMap":3292},[3296,6151,6152,6154],{"class":3298,"line":3299},[3296,6153,3303],{"class":3302},[3296,6155,3307],{"class":3306},[3296,6157,6158,6160],{"class":3298,"line":3310},[3296,6159,3303],{"class":3302},[3296,6161,3315],{"class":3306},[3296,6163,6164,6166],{"class":3298,"line":3318},[3296,6165,3303],{"class":3302},[3296,6167,5747],{"class":3306},[3296,6169,6170],{"class":3298,"line":3325},[3296,6171,3322],{"emptyLinePlaceholder":3321},[3296,6173,6174,6176,6178,6180],{"class":3298,"line":3343},[3296,6175,3328],{"class":3302},[3296,6177,3332],{"class":3331},[3296,6179,3336],{"class":3335},[3296,6181,3340],{"class":3339},[3296,6183,6184],{"class":3298,"line":3348},[3296,6185,3322],{"emptyLinePlaceholder":3321},[3296,6187,6188,6190,6192,6194,6196,6198,6200,6202,6204,6206,6208,6210,6213,6216],{"class":3298,"line":3361},[3296,6189,5770],{"class":3335},[3296,6191,5773],{"class":3339},[3296,6193,3440],{"class":3335},[3296,6195,5778],{"class":3339},[3296,6197,6140],{"class":3354},[3296,6199,3431],{"class":3339},[3296,6201,5786],{"class":3331},[3296,6203,5789],{"class":3335},[3296,6205,5792],{"class":3331},[3296,6207,5795],{"class":3421},[3296,6209,4265],{"class":3339},[3296,6211,6212],{"class":3331},"char",[3296,6214,6215],{"class":3421}," delimiter",[3296,6217,5809],{"class":3339},[3296,6219,6220],{"class":3298,"line":3367},[3296,6221,3364],{"class":3339},[3296,6223,6224],{"class":3298,"line":3378},[3296,6225,6226],{"class":3339},"    vector\u003Cstring> tokens;\n",[3296,6228,6229,6231,6233,6235],{"class":3298,"line":3389},[3296,6230,3460],{"class":3331},[3296,6232,3497],{"class":3339},[3296,6234,4401],{"class":3607},[3296,6236,3340],{"class":3339},[3296,6238,6239,6241,6244,6246,6248,6250],{"class":3298,"line":3400},[3296,6240,3460],{"class":3331},[3296,6242,6243],{"class":3339}," pos   = ",[3296,6245,3825],{"class":3421},[3296,6247,3425],{"class":3339},[3296,6249,3428],{"class":3354},[3296,6251,6252],{"class":3339},"(delimiter);\n",[3296,6254,6255],{"class":3298,"line":3405},[3296,6256,3322],{"emptyLinePlaceholder":3321},[3296,6258,6259,6261,6264,6266],{"class":3298,"line":3412},[3296,6260,5843],{"class":3302},[3296,6262,6263],{"class":3339}," (pos != ",[3296,6265,3440],{"class":3335},[3296,6267,3900],{"class":3339},[3296,6269,6270],{"class":3298,"line":3446},[3296,6271,5352],{"class":3339},[3296,6273,6274,6277,6279,6281,6283,6285,6287,6289],{"class":3298,"line":3451},[3296,6275,6276],{"class":3421},"        tokens",[3296,6278,3425],{"class":3339},[3296,6280,5873],{"class":3354},[3296,6282,3431],{"class":3339},[3296,6284,3825],{"class":3421},[3296,6286,3425],{"class":3339},[3296,6288,4556],{"class":3354},[3296,6290,6291],{"class":3339},"(start, pos - start));\n",[3296,6293,6294,6297,6299],{"class":3298,"line":3457},[3296,6295,6296],{"class":3339},"        start = pos + ",[3296,6298,3732],{"class":3607},[3296,6300,3340],{"class":3339},[3296,6302,6303,6306,6308,6310,6312],{"class":3298,"line":3481},[3296,6304,6305],{"class":3339},"        pos   = ",[3296,6307,3825],{"class":3421},[3296,6309,3425],{"class":3339},[3296,6311,3428],{"class":3354},[3296,6313,6314],{"class":3339},"(delimiter, start);\n",[3296,6316,6317],{"class":3298,"line":3486},[3296,6318,5370],{"class":3339},[3296,6320,6321],{"class":3298,"line":3492},[3296,6322,3322],{"emptyLinePlaceholder":3321},[3296,6324,6325],{"class":3298,"line":3522},[3296,6326,6327],{"class":3408},"    \u002F\u002F Не забути останній токен (після останнього роздільника)\n",[3296,6329,6330,6333,6335,6337,6339,6341,6343,6345],{"class":3298,"line":3527},[3296,6331,6332],{"class":3421},"    tokens",[3296,6334,3425],{"class":3339},[3296,6336,5873],{"class":3354},[3296,6338,3431],{"class":3339},[3296,6340,3825],{"class":3421},[3296,6342,3425],{"class":3339},[3296,6344,4556],{"class":3354},[3296,6346,6347],{"class":3339},"(start));\n",[3296,6349,6350],{"class":3298,"line":3552},[3296,6351,3322],{"emptyLinePlaceholder":3321},[3296,6353,6354,6356],{"class":3298,"line":3574},[3296,6355,3604],{"class":3302},[3296,6357,6358],{"class":3339}," tokens;\n",[3296,6360,6361],{"class":3298,"line":3596},[3296,6362,3616],{"class":3339},[3296,6364,6365],{"class":3298,"line":3601},[3296,6366,3322],{"emptyLinePlaceholder":3321},[3296,6368,6369,6371,6373],{"class":3298,"line":3613},[3296,6370,3351],{"class":3331},[3296,6372,3355],{"class":3354},[3296,6374,3358],{"class":3339},[3296,6376,6377],{"class":3298,"line":4370},[3296,6378,3364],{"class":3339},[3296,6380,6381,6384,6387],{"class":3298,"line":4379},[3296,6382,6383],{"class":3339},"    string csv = ",[3296,6385,6386],{"class":3306},"\"Alice,30,Kyiv,Ukraine\"",[3296,6388,3340],{"class":3339},[3296,6390,6391,6394,6396,6399,6401],{"class":3298,"line":5098},[3296,6392,6393],{"class":3339},"    vector\u003Cstring> fields = ",[3296,6395,6140],{"class":3354},[3296,6397,6398],{"class":3339},"(csv, ",[3296,6400,3475],{"class":3306},[3296,6402,3478],{"class":3339},[3296,6404,6405],{"class":3298,"line":5103},[3296,6406,3322],{"emptyLinePlaceholder":3321},[3296,6408,6409,6411,6414,6416,6419,6421,6423,6425,6427,6429,6431],{"class":3298,"line":5112},[3296,6410,3530],{"class":3339},[3296,6412,6413],{"class":3306},"\"Полів: \"",[3296,6415,3870],{"class":3339},[3296,6417,6418],{"class":3421},"fields",[3296,6420,3425],{"class":3339},[3296,6422,5987],{"class":3354},[3296,6424,5990],{"class":3339},[3296,6426,3517],{"class":3306},[3296,6428,3541],{"class":3513},[3296,6430,3517],{"class":3306},[3296,6432,3340],{"class":3339},[3296,6434,6435,6437,6439,6441,6444,6446,6449,6451,6453,6455],{"class":3298,"line":5517},[3296,6436,6004],{"class":3302},[3296,6438,6007],{"class":3339},[3296,6440,3702],{"class":3331},[3296,6442,6443],{"class":3339}," i = ",[3296,6445,4401],{"class":3607},[3296,6447,6448],{"class":3339},"; i \u003C ",[3296,6450,6418],{"class":3421},[3296,6452,3425],{"class":3339},[3296,6454,5987],{"class":3354},[3296,6456,6457],{"class":3339},"(); ++i)\n",[3296,6459,6460,6462,6465,6468,6471,6473,6475,6477,6479,6482,6484,6486,6488],{"class":3298,"line":5551},[3296,6461,3905],{"class":3339},[3296,6463,6464],{"class":3306},"\"  [\"",[3296,6466,6467],{"class":3339}," \u003C\u003C i \u003C\u003C ",[3296,6469,6470],{"class":3306},"\"] = ",[3296,6472,3910],{"class":3513},[3296,6474,3517],{"class":3306},[3296,6476,3870],{"class":3339},[3296,6478,6418],{"class":3421},[3296,6480,6481],{"class":3339},"[i] \u003C\u003C ",[3296,6483,3517],{"class":3306},[3296,6485,6052],{"class":3513},[3296,6487,3517],{"class":3306},[3296,6489,3340],{"class":3339},[3296,6491,6492],{"class":3298,"line":5585},[3296,6493,3322],{"emptyLinePlaceholder":3321},[3296,6495,6496,6498,6500],{"class":3298,"line":5590},[3296,6497,3604],{"class":3302},[3296,6499,3608],{"class":3607},[3296,6501,3340],{"class":3339},[3296,6503,6504],{"class":3298,"line":5599},[3296,6505,3616],{"class":3339},[3618,6507,6509,6518,6526,6534,6542,6550,6558],{"title":6508},".\u002FSplit",[3622,6510,6512,3630,6515],{"className":6511},[3298],[3296,6513,3629],{"className":6514},[3628],[3632,6516,6508],{"className":6517},[3635],[3622,6519,6521,6522],{"className":6520},[3298],"Полів: ",[3296,6523,6525],{"className":6524},[3653],"4",[3622,6527,6529,6530,3517],{"className":6528},[3298],"  [0] = \"",[3296,6531,6533],{"className":6532},[3653],"Alice",[3622,6535,6537,6538,3517],{"className":6536},[3298],"  [1] = \"",[3296,6539,6541],{"className":6540},[3653],"30",[3622,6543,6545,6546,3517],{"className":6544},[3298],"  [2] = \"",[3296,6547,6549],{"className":6548},[3653],"Kyiv",[3622,6551,6553,6554,3517],{"className":6552},[3298],"  [3] = \"",[3296,6555,6557],{"className":6556},[3653],"Ukraine",[3622,6559,3666,6561,3425],{"className":6560},[3298],[3296,6562,3670],{"className":6563},[3644,3635],[4055,6565,6567,6570],{"id":6566},"trim-видалення-пробілів-з-країв",[3272,6568,6569],{},"trim"," — видалення пробілів з країв",[3285,6572,6575],{"className":3287,"code":6573,"filename":6574,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nstring trim(const string& s)\n{\n    const string whitespace = \" \\t\\r\\n\";\n\n    size_t start = s.find_first_not_of(whitespace);\n    if (start == string::npos)\n        return \"\"; \u002F\u002F рядок цілком із пробілів\n\n    size_t end = s.find_last_not_of(whitespace);\n    return s.substr(start, end - start + 1);\n}\n\nint main()\n{\n    cout \u003C\u003C \"'\" \u003C\u003C trim(\"  Hello, World!  \") \u003C\u003C \"'\\n\";\n    cout \u003C\u003C \"'\" \u003C\u003C trim(\"\\t\\n test \\t\\n\")    \u003C\u003C \"'\\n\";\n    cout \u003C\u003C \"'\" \u003C\u003C trim(\"   \")               \u003C\u003C \"'\\n\";\n    cout \u003C\u003C \"'\" \u003C\u003C trim(\"no spaces\")         \u003C\u003C \"'\\n\";\n\n    return 0;\n}\n","Trim.cpp",[3272,6576,6577,6583,6589,6593,6603,6607,6626,6630,6646,6650,6665,6675,6688,6692,6707,6723,6727,6731,6739,6743,6768,6803,6829,6855,6859,6867],{"__ignoreMap":3292},[3296,6578,6579,6581],{"class":3298,"line":3299},[3296,6580,3303],{"class":3302},[3296,6582,3307],{"class":3306},[3296,6584,6585,6587],{"class":3298,"line":3310},[3296,6586,3303],{"class":3302},[3296,6588,3315],{"class":3306},[3296,6590,6591],{"class":3298,"line":3318},[3296,6592,3322],{"emptyLinePlaceholder":3321},[3296,6594,6595,6597,6599,6601],{"class":3298,"line":3325},[3296,6596,3328],{"class":3302},[3296,6598,3332],{"class":3331},[3296,6600,3336],{"class":3335},[3296,6602,3340],{"class":3339},[3296,6604,6605],{"class":3298,"line":3343},[3296,6606,3322],{"emptyLinePlaceholder":3321},[3296,6608,6609,6611,6614,6616,6618,6620,6622,6624],{"class":3298,"line":3348},[3296,6610,3440],{"class":3335},[3296,6612,6613],{"class":3354}," trim",[3296,6615,3431],{"class":3339},[3296,6617,5786],{"class":3331},[3296,6619,5789],{"class":3335},[3296,6621,5792],{"class":3331},[3296,6623,5795],{"class":3421},[3296,6625,5809],{"class":3339},[3296,6627,6628],{"class":3298,"line":3361},[3296,6629,3364],{"class":3339},[3296,6631,6632,6635,6638,6640,6642,6644],{"class":3298,"line":3367},[3296,6633,6634],{"class":3331},"    const",[3296,6636,6637],{"class":3339}," string whitespace = ",[3296,6639,3510],{"class":3306},[3296,6641,5305],{"class":3513},[3296,6643,3517],{"class":3306},[3296,6645,3340],{"class":3339},[3296,6647,6648],{"class":3298,"line":3378},[3296,6649,3322],{"emptyLinePlaceholder":3321},[3296,6651,6652,6654,6656,6658,6660,6662],{"class":3298,"line":3389},[3296,6653,3460],{"class":3331},[3296,6655,3497],{"class":3339},[3296,6657,3825],{"class":3421},[3296,6659,3425],{"class":3339},[3296,6661,3505],{"class":3354},[3296,6663,6664],{"class":3339},"(whitespace);\n",[3296,6666,6667,6669,6671,6673],{"class":3298,"line":3400},[3296,6668,3892],{"class":3302},[3296,6670,5343],{"class":3339},[3296,6672,3440],{"class":3335},[3296,6674,3900],{"class":3339},[3296,6676,6677,6680,6683,6685],{"class":3298,"line":3405},[3296,6678,6679],{"class":3302},"        return",[3296,6681,6682],{"class":3306}," \"\"",[3296,6684,3546],{"class":3339},[3296,6686,6687],{"class":3408}," \u002F\u002F рядок цілком із пробілів\n",[3296,6689,6690],{"class":3298,"line":3412},[3296,6691,3322],{"emptyLinePlaceholder":3321},[3296,6693,6694,6696,6699,6701,6703,6705],{"class":3298,"line":3446},[3296,6695,3460],{"class":3331},[3296,6697,6698],{"class":3339}," end = ",[3296,6700,3825],{"class":3421},[3296,6702,3425],{"class":3339},[3296,6704,5208],{"class":3354},[3296,6706,6664],{"class":3339},[3296,6708,6709,6711,6713,6715,6717,6719,6721],{"class":3298,"line":3451},[3296,6710,3604],{"class":3302},[3296,6712,5795],{"class":3421},[3296,6714,3425],{"class":3339},[3296,6716,4556],{"class":3354},[3296,6718,5393],{"class":3339},[3296,6720,3732],{"class":3607},[3296,6722,3478],{"class":3339},[3296,6724,6725],{"class":3298,"line":3457},[3296,6726,3616],{"class":3339},[3296,6728,6729],{"class":3298,"line":3481},[3296,6730,3322],{"emptyLinePlaceholder":3321},[3296,6732,6733,6735,6737],{"class":3298,"line":3486},[3296,6734,3351],{"class":3331},[3296,6736,3355],{"class":3354},[3296,6738,3358],{"class":3339},[3296,6740,6741],{"class":3298,"line":3492},[3296,6742,3364],{"class":3339},[3296,6744,6745,6747,6749,6751,6753,6755,6758,6760,6762,6764,6766],{"class":3298,"line":3522},[3296,6746,3530],{"class":3339},[3296,6748,5404],{"class":3306},[3296,6750,3870],{"class":3339},[3296,6752,6569],{"class":3354},[3296,6754,3431],{"class":3339},[3296,6756,6757],{"class":3306},"\"  Hello, World!  \"",[3296,6759,4564],{"class":3339},[3296,6761,5410],{"class":3306},[3296,6763,3541],{"class":3513},[3296,6765,3517],{"class":3306},[3296,6767,3340],{"class":3339},[3296,6769,6770,6772,6774,6776,6778,6780,6782,6785,6788,6790,6792,6795,6797,6799,6801],{"class":3298,"line":3527},[3296,6771,3530],{"class":3339},[3296,6773,5404],{"class":3306},[3296,6775,3870],{"class":3339},[3296,6777,6569],{"class":3354},[3296,6779,3431],{"class":3339},[3296,6781,3517],{"class":3306},[3296,6783,6784],{"class":3513},"\\t\\n",[3296,6786,6787],{"class":3306}," test ",[3296,6789,6784],{"class":3513},[3296,6791,3517],{"class":3306},[3296,6793,6794],{"class":3339},")    \u003C\u003C ",[3296,6796,5410],{"class":3306},[3296,6798,3541],{"class":3513},[3296,6800,3517],{"class":3306},[3296,6802,3340],{"class":3339},[3296,6804,6805,6807,6809,6811,6813,6815,6818,6821,6823,6825,6827],{"class":3298,"line":3552},[3296,6806,3530],{"class":3339},[3296,6808,5404],{"class":3306},[3296,6810,3870],{"class":3339},[3296,6812,6569],{"class":3354},[3296,6814,3431],{"class":3339},[3296,6816,6817],{"class":3306},"\"   \"",[3296,6819,6820],{"class":3339},")               \u003C\u003C ",[3296,6822,5410],{"class":3306},[3296,6824,3541],{"class":3513},[3296,6826,3517],{"class":3306},[3296,6828,3340],{"class":3339},[3296,6830,6831,6833,6835,6837,6839,6841,6844,6847,6849,6851,6853],{"class":3298,"line":3574},[3296,6832,3530],{"class":3339},[3296,6834,5404],{"class":3306},[3296,6836,3870],{"class":3339},[3296,6838,6569],{"class":3354},[3296,6840,3431],{"class":3339},[3296,6842,6843],{"class":3306},"\"no spaces\"",[3296,6845,6846],{"class":3339},")         \u003C\u003C ",[3296,6848,5410],{"class":3306},[3296,6850,3541],{"class":3513},[3296,6852,3517],{"class":3306},[3296,6854,3340],{"class":3339},[3296,6856,6857],{"class":3298,"line":3596},[3296,6858,3322],{"emptyLinePlaceholder":3321},[3296,6860,6861,6863,6865],{"class":3298,"line":3601},[3296,6862,3604],{"class":3302},[3296,6864,3608],{"class":3607},[3296,6866,3340],{"class":3339},[3296,6868,6869],{"class":3298,"line":3613},[3296,6870,3616],{"class":3339},[3618,6872,6874,6883,6889,6896,6900,6907],{"title":6873},".\u002FTrim",[3622,6875,6877,3630,6880],{"className":6876},[3298],[3296,6878,3629],{"className":6879},[3628],[3632,6881,6873],{"className":6882},[3635],[3622,6884,5617,6886,5617],{"className":6885},[3298],[3296,6887,5621],{"className":6888},[3653],[3622,6890,5617,6892,5617],{"className":6891},[3298],[3296,6893,6895],{"className":6894},[3653],"test",[3622,6897,6899],{"className":6898},[3298],"''",[3622,6901,5617,6903,5617],{"className":6902},[3298],[3296,6904,6906],{"className":6905},[3653],"no spaces",[3622,6908,3666,6910,3425],{"className":6909},[3298],[3296,6911,3670],{"className":6912},[3644,3635],[4055,6914,6916,4050,6919,5213,6922],{"id":6915},"contains-та-starts_with-ends_with",[3272,6917,6918],{},"contains",[3272,6920,6921],{},"starts_with",[3272,6923,6924],{},"ends_with",[3281,6926,6927,6928,6931,6932,6934,6935,4801],{},"Часто потрібно лише перевірити ",[3632,6929,6930],{},"наявність"," підрядка без збереження позиції. До C++23 — через ",[3272,6933,3428],{},", з C++23 — через ",[3272,6936,6937],{},".contains()",[3285,6939,6942],{"className":3287,"code":6940,"filename":6941,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nint main()\n{\n    string email = \"user@example.com\";\n\n    \u002F\u002F contains (до C++23: через find)\n    bool hasAt     = email.find('@')       != string::npos;\n    bool hasDot    = email.find('.')       != string::npos;\n    bool hasMalware= email.find(\"malware\") != string::npos;\n\n    cout \u003C\u003C boolalpha;\n    cout \u003C\u003C \"є '@':       \" \u003C\u003C hasAt      \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C \"є '.':       \" \u003C\u003C hasDot     \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C \"є 'malware': \" \u003C\u003C hasMalware \u003C\u003C \"\\n\"; \u002F\u002F false\n\n    \u002F\u002F starts_with \u002F ends_with (C++20)\n    cout \u003C\u003C \"Починається з 'user': \"\n              \u003C\u003C email.starts_with(\"user\") \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C \"Закінчується на '.com': \"\n              \u003C\u003C email.ends_with(\".com\")   \u003C\u003C \"\\n\"; \u002F\u002F true\n\n    return 0;\n}\n","Contains.cpp",[3272,6943,6944,6950,6956,6960,6970,6974,6982,6986,6995,6999,7004,7028,7051,7075,7079,7083,7103,7123,7143,7147,7152,7159,7187,7194,7222,7226,7234],{"__ignoreMap":3292},[3296,6945,6946,6948],{"class":3298,"line":3299},[3296,6947,3303],{"class":3302},[3296,6949,3307],{"class":3306},[3296,6951,6952,6954],{"class":3298,"line":3310},[3296,6953,3303],{"class":3302},[3296,6955,3315],{"class":3306},[3296,6957,6958],{"class":3298,"line":3318},[3296,6959,3322],{"emptyLinePlaceholder":3321},[3296,6961,6962,6964,6966,6968],{"class":3298,"line":3325},[3296,6963,3328],{"class":3302},[3296,6965,3332],{"class":3331},[3296,6967,3336],{"class":3335},[3296,6969,3340],{"class":3339},[3296,6971,6972],{"class":3298,"line":3343},[3296,6973,3322],{"emptyLinePlaceholder":3321},[3296,6975,6976,6978,6980],{"class":3298,"line":3348},[3296,6977,3351],{"class":3331},[3296,6979,3355],{"class":3354},[3296,6981,3358],{"class":3339},[3296,6983,6984],{"class":3298,"line":3361},[3296,6985,3364],{"class":3339},[3296,6987,6988,6991,6993],{"class":3298,"line":3367},[3296,6989,6990],{"class":3339},"    string email = ",[3296,6992,3373],{"class":3306},[3296,6994,3340],{"class":3339},[3296,6996,6997],{"class":3298,"line":3378},[3296,6998,3322],{"emptyLinePlaceholder":3321},[3296,7000,7001],{"class":3298,"line":3389},[3296,7002,7003],{"class":3408},"    \u002F\u002F contains (до C++23: через find)\n",[3296,7005,7006,7008,7011,7013,7015,7017,7019,7021,7024,7026],{"class":3298,"line":3400},[3296,7007,3415],{"class":3331},[3296,7009,7010],{"class":3339}," hasAt     = ",[3296,7012,3422],{"class":3421},[3296,7014,3425],{"class":3339},[3296,7016,3428],{"class":3354},[3296,7018,3431],{"class":3339},[3296,7020,3434],{"class":3306},[3296,7022,7023],{"class":3339},")       != ",[3296,7025,3440],{"class":3335},[3296,7027,3443],{"class":3339},[3296,7029,7030,7032,7035,7037,7039,7041,7043,7045,7047,7049],{"class":3298,"line":3405},[3296,7031,3415],{"class":3331},[3296,7033,7034],{"class":3339}," hasDot    = ",[3296,7036,3422],{"class":3421},[3296,7038,3425],{"class":3339},[3296,7040,3428],{"class":3354},[3296,7042,3431],{"class":3339},[3296,7044,4527],{"class":3306},[3296,7046,7023],{"class":3339},[3296,7048,3440],{"class":3335},[3296,7050,3443],{"class":3339},[3296,7052,7053,7055,7058,7060,7062,7064,7066,7069,7071,7073],{"class":3298,"line":3412},[3296,7054,3415],{"class":3331},[3296,7056,7057],{"class":3339}," hasMalware= ",[3296,7059,3422],{"class":3421},[3296,7061,3425],{"class":3339},[3296,7063,3428],{"class":3354},[3296,7065,3431],{"class":3339},[3296,7067,7068],{"class":3306},"\"malware\"",[3296,7070,3437],{"class":3339},[3296,7072,3440],{"class":3335},[3296,7074,3443],{"class":3339},[3296,7076,7077],{"class":3298,"line":3446},[3296,7078,3322],{"emptyLinePlaceholder":3321},[3296,7080,7081],{"class":3298,"line":3451},[3296,7082,5514],{"class":3339},[3296,7084,7085,7087,7090,7093,7095,7097,7099,7101],{"class":3298,"line":3457},[3296,7086,3530],{"class":3339},[3296,7088,7089],{"class":3306},"\"є '@':       \"",[3296,7091,7092],{"class":3339}," \u003C\u003C hasAt      \u003C\u003C ",[3296,7094,3517],{"class":3306},[3296,7096,3541],{"class":3513},[3296,7098,3517],{"class":3306},[3296,7100,3546],{"class":3339},[3296,7102,3549],{"class":3408},[3296,7104,7105,7107,7110,7113,7115,7117,7119,7121],{"class":3298,"line":3481},[3296,7106,3530],{"class":3339},[3296,7108,7109],{"class":3306},"\"є '.':       \"",[3296,7111,7112],{"class":3339}," \u003C\u003C hasDot     \u003C\u003C ",[3296,7114,3517],{"class":3306},[3296,7116,3541],{"class":3513},[3296,7118,3517],{"class":3306},[3296,7120,3546],{"class":3339},[3296,7122,3549],{"class":3408},[3296,7124,7125,7127,7130,7133,7135,7137,7139,7141],{"class":3298,"line":3486},[3296,7126,3530],{"class":3339},[3296,7128,7129],{"class":3306},"\"є 'malware': \"",[3296,7131,7132],{"class":3339}," \u003C\u003C hasMalware \u003C\u003C ",[3296,7134,3517],{"class":3306},[3296,7136,3541],{"class":3513},[3296,7138,3517],{"class":3306},[3296,7140,3546],{"class":3339},[3296,7142,5582],{"class":3408},[3296,7144,7145],{"class":3298,"line":3492},[3296,7146,3322],{"emptyLinePlaceholder":3321},[3296,7148,7149],{"class":3298,"line":3522},[3296,7150,7151],{"class":3408},"    \u002F\u002F starts_with \u002F ends_with (C++20)\n",[3296,7153,7154,7156],{"class":3298,"line":3527},[3296,7155,3530],{"class":3339},[3296,7157,7158],{"class":3306},"\"Починається з 'user': \"\n",[3296,7160,7161,7164,7166,7168,7170,7172,7175,7177,7179,7181,7183,7185],{"class":3298,"line":3552},[3296,7162,7163],{"class":3339},"              \u003C\u003C ",[3296,7165,3422],{"class":3421},[3296,7167,3425],{"class":3339},[3296,7169,6921],{"class":3354},[3296,7171,3431],{"class":3339},[3296,7173,7174],{"class":3306},"\"user\"",[3296,7176,4564],{"class":3339},[3296,7178,3517],{"class":3306},[3296,7180,3541],{"class":3513},[3296,7182,3517],{"class":3306},[3296,7184,3546],{"class":3339},[3296,7186,3549],{"class":3408},[3296,7188,7189,7191],{"class":3298,"line":3574},[3296,7190,3530],{"class":3339},[3296,7192,7193],{"class":3306},"\"Закінчується на '.com': \"\n",[3296,7195,7196,7198,7200,7202,7204,7206,7209,7212,7214,7216,7218,7220],{"class":3298,"line":3596},[3296,7197,7163],{"class":3339},[3296,7199,3422],{"class":3421},[3296,7201,3425],{"class":3339},[3296,7203,6924],{"class":3354},[3296,7205,3431],{"class":3339},[3296,7207,7208],{"class":3306},"\".com\"",[3296,7210,7211],{"class":3339},")   \u003C\u003C ",[3296,7213,3517],{"class":3306},[3296,7215,3541],{"class":3513},[3296,7217,3517],{"class":3306},[3296,7219,3546],{"class":3339},[3296,7221,3549],{"class":3408},[3296,7223,7224],{"class":3298,"line":3601},[3296,7225,3322],{"emptyLinePlaceholder":3321},[3296,7227,7228,7230,7232],{"class":3298,"line":3613},[3296,7229,3604],{"class":3302},[3296,7231,3608],{"class":3607},[3296,7233,3340],{"class":3339},[3296,7235,7236],{"class":3298,"line":4370},[3296,7237,3616],{"class":3339},[3618,7239,7241,7250,7257,7264,7271,7278,7285],{"title":7240},".\u002FContains",[3622,7242,7244,3630,7247],{"className":7243},[3298],[3296,7245,3629],{"className":7246},[3628],[3632,7248,7240],{"className":7249},[3635],[3622,7251,7253,7254],{"className":7252},[3298],"є '@':       ",[3296,7255,3645],{"className":7256},[3644,3635],[3622,7258,7260,7261],{"className":7259},[3298],"є '.':       ",[3296,7262,3645],{"className":7263},[3644,3635],[3622,7265,7267,7268],{"className":7266},[3298],"є 'malware': ",[3296,7269,5637],{"className":7270},[5636],[3622,7272,7274,7275],{"className":7273},[3298],"Починається з 'user': ",[3296,7276,3645],{"className":7277},[3644,3635],[3622,7279,7281,7282],{"className":7280},[3298],"Закінчується на '.com': ",[3296,7283,3645],{"className":7284},[3644,3635],[3622,7286,3666,7288,3425],{"className":7287},[3298],[3296,7289,3670],{"className":7290},[3644,3635],[7292,7293,7294,7295,7298,7299,7302],"tip",{},"У C++23 додано ",[3272,7296,7297],{},".contains(str)"," як скорочення ",[3272,7300,7301],{},"find(str) != npos",". Якщо компілятор підтримує стандарт C++23, використовуйте його — код стає виразнішим.",[4055,7304,7306,7307],{"id":7305},"парсинг-формату-key-value","Парсинг формату ",[3272,7308,7309],{},"key = value",[3281,7311,7312,7313,4265,7315,4050,7317,7319],{},"Поєднання ",[3272,7314,3428],{},[3272,7316,6569],{},[3272,7318,4556],{}," дозволяє розібрати простий текстовий формат без бібліотек:",[3285,7321,7324],{"className":3287,"code":7322,"filename":7323,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n\nusing namespace std;\n\nstring trim(const string& s)\n{\n    const string ws = \" \\t\";\n    size_t a = s.find_first_not_of(ws);\n    if (a == string::npos) return \"\";\n    size_t b = s.find_last_not_of(ws);\n    return s.substr(a, b - a + 1);\n}\n\nint main()\n{\n    \u002F\u002F Імітація рядків конфігураційного файлу\n    const string lines[] = {\n        \"host     = localhost\",\n        \"port     = 5432\",\n        \"  database = myapp  \",\n        \"# це коментар\",\n        \"timeout  = 30\"\n    };\n\n    for (const string& line : lines)\n    {\n        string trimmed = trim(line);\n\n        \u002F\u002F Пропустити порожні рядки та коментарі\n        if (trimmed.empty() || trimmed[0] == '#')\n            continue;\n\n        size_t eq = trimmed.find('=');\n        if (eq == string::npos)\n            continue; \u002F\u002F немає '=' — некоректний рядок\n\n        string key   = trim(trimmed.substr(0, eq));\n        string value = trim(trimmed.substr(eq + 1));\n\n        cout \u003C\u003C \"[\" \u003C\u003C key \u003C\u003C \"] = [\" \u003C\u003C value \u003C\u003C \"]\\n\";\n    }\n\n    return 0;\n}\n","KeyValue.cpp",[3272,7325,7326,7332,7338,7342,7352,7356,7374,7378,7393,7409,7428,7443,7460,7464,7468,7476,7480,7485,7492,7500,7507,7514,7521,7526,7531,7535,7546,7550,7559,7563,7568,7601,7608,7612,7633,7644,7653,7658,7681,7705,7710,7736,7741,7746,7755],{"__ignoreMap":3292},[3296,7327,7328,7330],{"class":3298,"line":3299},[3296,7329,3303],{"class":3302},[3296,7331,3307],{"class":3306},[3296,7333,7334,7336],{"class":3298,"line":3310},[3296,7335,3303],{"class":3302},[3296,7337,3315],{"class":3306},[3296,7339,7340],{"class":3298,"line":3318},[3296,7341,3322],{"emptyLinePlaceholder":3321},[3296,7343,7344,7346,7348,7350],{"class":3298,"line":3325},[3296,7345,3328],{"class":3302},[3296,7347,3332],{"class":3331},[3296,7349,3336],{"class":3335},[3296,7351,3340],{"class":3339},[3296,7353,7354],{"class":3298,"line":3343},[3296,7355,3322],{"emptyLinePlaceholder":3321},[3296,7357,7358,7360,7362,7364,7366,7368,7370,7372],{"class":3298,"line":3348},[3296,7359,3440],{"class":3335},[3296,7361,6613],{"class":3354},[3296,7363,3431],{"class":3339},[3296,7365,5786],{"class":3331},[3296,7367,5789],{"class":3335},[3296,7369,5792],{"class":3331},[3296,7371,5795],{"class":3421},[3296,7373,5809],{"class":3339},[3296,7375,7376],{"class":3298,"line":3361},[3296,7377,3364],{"class":3339},[3296,7379,7380,7382,7385,7387,7389,7391],{"class":3298,"line":3367},[3296,7381,6634],{"class":3331},[3296,7383,7384],{"class":3339}," string ws = ",[3296,7386,3510],{"class":3306},[3296,7388,3514],{"class":3513},[3296,7390,3517],{"class":3306},[3296,7392,3340],{"class":3339},[3296,7394,7395,7397,7400,7402,7404,7406],{"class":3298,"line":3378},[3296,7396,3460],{"class":3331},[3296,7398,7399],{"class":3339}," a = ",[3296,7401,3825],{"class":3421},[3296,7403,3425],{"class":3339},[3296,7405,3505],{"class":3354},[3296,7407,7408],{"class":3339},"(ws);\n",[3296,7410,7411,7413,7416,7418,7421,7424,7426],{"class":3298,"line":3389},[3296,7412,3892],{"class":3302},[3296,7414,7415],{"class":3339}," (a == ",[3296,7417,3440],{"class":3335},[3296,7419,7420],{"class":3339},"::npos) ",[3296,7422,7423],{"class":3302},"return",[3296,7425,6682],{"class":3306},[3296,7427,3340],{"class":3339},[3296,7429,7430,7432,7435,7437,7439,7441],{"class":3298,"line":3400},[3296,7431,3460],{"class":3331},[3296,7433,7434],{"class":3339}," b = ",[3296,7436,3825],{"class":3421},[3296,7438,3425],{"class":3339},[3296,7440,5208],{"class":3354},[3296,7442,7408],{"class":3339},[3296,7444,7445,7447,7449,7451,7453,7456,7458],{"class":3298,"line":3405},[3296,7446,3604],{"class":3302},[3296,7448,5795],{"class":3421},[3296,7450,3425],{"class":3339},[3296,7452,4556],{"class":3354},[3296,7454,7455],{"class":3339},"(a, b - a + ",[3296,7457,3732],{"class":3607},[3296,7459,3478],{"class":3339},[3296,7461,7462],{"class":3298,"line":3412},[3296,7463,3616],{"class":3339},[3296,7465,7466],{"class":3298,"line":3446},[3296,7467,3322],{"emptyLinePlaceholder":3321},[3296,7469,7470,7472,7474],{"class":3298,"line":3451},[3296,7471,3351],{"class":3331},[3296,7473,3355],{"class":3354},[3296,7475,3358],{"class":3339},[3296,7477,7478],{"class":3298,"line":3457},[3296,7479,3364],{"class":3339},[3296,7481,7482],{"class":3298,"line":3481},[3296,7483,7484],{"class":3408},"    \u002F\u002F Імітація рядків конфігураційного файлу\n",[3296,7486,7487,7489],{"class":3298,"line":3486},[3296,7488,6634],{"class":3331},[3296,7490,7491],{"class":3339}," string lines[] = {\n",[3296,7493,7494,7497],{"class":3298,"line":3492},[3296,7495,7496],{"class":3306},"        \"host     = localhost\"",[3296,7498,7499],{"class":3339},",\n",[3296,7501,7502,7505],{"class":3298,"line":3522},[3296,7503,7504],{"class":3306},"        \"port     = 5432\"",[3296,7506,7499],{"class":3339},[3296,7508,7509,7512],{"class":3298,"line":3527},[3296,7510,7511],{"class":3306},"        \"  database = myapp  \"",[3296,7513,7499],{"class":3339},[3296,7515,7516,7519],{"class":3298,"line":3552},[3296,7517,7518],{"class":3306},"        \"# це коментар\"",[3296,7520,7499],{"class":3339},[3296,7522,7523],{"class":3298,"line":3574},[3296,7524,7525],{"class":3306},"        \"timeout  = 30\"\n",[3296,7527,7528],{"class":3298,"line":3596},[3296,7529,7530],{"class":3339},"    };\n",[3296,7532,7533],{"class":3298,"line":3601},[3296,7534,3322],{"emptyLinePlaceholder":3321},[3296,7536,7537,7539,7541,7543],{"class":3298,"line":3613},[3296,7538,6004],{"class":3302},[3296,7540,6007],{"class":3339},[3296,7542,5786],{"class":3331},[3296,7544,7545],{"class":3339}," string& line : lines)\n",[3296,7547,7548],{"class":3298,"line":4370},[3296,7549,5352],{"class":3339},[3296,7551,7552,7554,7556],{"class":3298,"line":4379},[3296,7553,5384],{"class":3339},[3296,7555,6569],{"class":3354},[3296,7557,7558],{"class":3339},"(line);\n",[3296,7560,7561],{"class":3298,"line":5098},[3296,7562,3322],{"emptyLinePlaceholder":3321},[3296,7564,7565],{"class":3298,"line":5103},[3296,7566,7567],{"class":3408},"        \u002F\u002F Пропустити порожні рядки та коментарі\n",[3296,7569,7570,7573,7575,7578,7580,7583,7586,7588,7591,7593,7596,7599],{"class":3298,"line":5112},[3296,7571,7572],{"class":3302},"        if",[3296,7574,6007],{"class":3339},[3296,7576,7577],{"class":3421},"trimmed",[3296,7579,3425],{"class":3339},[3296,7581,7582],{"class":3354},"empty",[3296,7584,7585],{"class":3339},"() || ",[3296,7587,7577],{"class":3421},[3296,7589,7590],{"class":3339},"[",[3296,7592,4401],{"class":3607},[3296,7594,7595],{"class":3339},"] == ",[3296,7597,7598],{"class":3306},"'#'",[3296,7600,5809],{"class":3339},[3296,7602,7603,7606],{"class":3298,"line":5517},[3296,7604,7605],{"class":3302},"            continue",[3296,7607,3340],{"class":3339},[3296,7609,7610],{"class":3298,"line":5551},[3296,7611,3322],{"emptyLinePlaceholder":3321},[3296,7613,7614,7617,7620,7622,7624,7626,7628,7631],{"class":3298,"line":5585},[3296,7615,7616],{"class":3331},"        size_t",[3296,7618,7619],{"class":3339}," eq = ",[3296,7621,7577],{"class":3421},[3296,7623,3425],{"class":3339},[3296,7625,3428],{"class":3354},[3296,7627,3431],{"class":3339},[3296,7629,7630],{"class":3306},"'='",[3296,7632,3478],{"class":3339},[3296,7634,7635,7637,7640,7642],{"class":3298,"line":5590},[3296,7636,7572],{"class":3302},[3296,7638,7639],{"class":3339}," (eq == ",[3296,7641,3440],{"class":3335},[3296,7643,3900],{"class":3339},[3296,7645,7646,7648,7650],{"class":3298,"line":5599},[3296,7647,7605],{"class":3302},[3296,7649,3546],{"class":3339},[3296,7651,7652],{"class":3408}," \u002F\u002F немає '=' — некоректний рядок\n",[3296,7654,7656],{"class":3298,"line":7655},37,[3296,7657,3322],{"emptyLinePlaceholder":3321},[3296,7659,7661,7664,7666,7668,7670,7672,7674,7676,7678],{"class":3298,"line":7660},38,[3296,7662,7663],{"class":3339},"        string key   = ",[3296,7665,6569],{"class":3354},[3296,7667,3431],{"class":3339},[3296,7669,7577],{"class":3421},[3296,7671,3425],{"class":3339},[3296,7673,4556],{"class":3354},[3296,7675,3431],{"class":3339},[3296,7677,4401],{"class":3607},[3296,7679,7680],{"class":3339},", eq));\n",[3296,7682,7684,7687,7689,7691,7693,7695,7697,7700,7702],{"class":3298,"line":7683},39,[3296,7685,7686],{"class":3339},"        string value = ",[3296,7688,6569],{"class":3354},[3296,7690,3431],{"class":3339},[3296,7692,7577],{"class":3421},[3296,7694,3425],{"class":3339},[3296,7696,4556],{"class":3354},[3296,7698,7699],{"class":3339},"(eq + ",[3296,7701,3732],{"class":3607},[3296,7703,7704],{"class":3339},"));\n",[3296,7706,7708],{"class":3298,"line":7707},40,[3296,7709,3322],{"emptyLinePlaceholder":3321},[3296,7711,7713,7715,7718,7721,7724,7727,7730,7732,7734],{"class":3298,"line":7712},41,[3296,7714,3905],{"class":3339},[3296,7716,7717],{"class":3306},"\"[\"",[3296,7719,7720],{"class":3339}," \u003C\u003C key \u003C\u003C ",[3296,7722,7723],{"class":3306},"\"] = [\"",[3296,7725,7726],{"class":3339}," \u003C\u003C value \u003C\u003C ",[3296,7728,7729],{"class":3306},"\"]",[3296,7731,3541],{"class":3513},[3296,7733,3517],{"class":3306},[3296,7735,3340],{"class":3339},[3296,7737,7739],{"class":3298,"line":7738},42,[3296,7740,5370],{"class":3339},[3296,7742,7744],{"class":3298,"line":7743},43,[3296,7745,3322],{"emptyLinePlaceholder":3321},[3296,7747,7749,7751,7753],{"class":3298,"line":7748},44,[3296,7750,3604],{"class":3302},[3296,7752,3608],{"class":3607},[3296,7754,3340],{"class":3339},[3296,7756,7758],{"class":3298,"line":7757},45,[3296,7759,3616],{"class":3339},[3618,7761,7763,7772,7785,7796,7807,7817],{"title":7762},".\u002FKeyValue",[3622,7764,7766,3630,7769],{"className":7765},[3298],[3296,7767,3629],{"className":7768},[3628],[3632,7770,7762],{"className":7771},[3635],[3622,7773,7590,7775,7779,7780,7784],{"className":7774},[3298],[3296,7776,7778],{"className":7777},[3653],"host","] = [",[3296,7781,7783],{"className":7782},[3644,3635],"localhost","]",[3622,7786,7590,7788,7779,7792,7784],{"className":7787},[3298],[3296,7789,7791],{"className":7790},[3653],"port",[3296,7793,7795],{"className":7794},[3644,3635],"5432",[3622,7797,7590,7799,7779,7803,7784],{"className":7798},[3298],[3296,7800,7802],{"className":7801},[3653],"database",[3296,7804,7806],{"className":7805},[3644,3635],"myapp",[3622,7808,7590,7810,7779,7814,7784],{"className":7809},[3298],[3296,7811,7813],{"className":7812},[3653],"timeout",[3296,7815,6541],{"className":7816},[3644,3635],[3622,7818,3666,7820,3425],{"className":7819},[3298],[3296,7821,3670],{"className":7822},[3644,3635],[3678,7824],{},[3276,7826,4047,7828,7830,7831],{"id":7827},"методи-stdstring-vs-алгоритми-algorithm",[3272,7829,3274],{}," vs алгоритми ",[3272,7832,7833],{},"\u003Calgorithm>",[3281,7835,4047,7836,7838,7839,7841],{},[3272,7837,4060],{}," та споріднені — не єдиний спосіб пошуку в рядку. ",[3272,7840,3274],{}," є контейнером і підтримує всі STL-алгоритми через ітератори:",[3285,7843,7846],{"className":3287,"code":7844,"filename":7845,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Calgorithm> \u002F\u002F find, count, search\n\nusing namespace std;\n\nint main()\n{\n    string s = \"Hello, World!\";\n\n    \u002F\u002F Знайти один символ через find\n    auto it = find(s.begin(), s.end(), 'o');\n    if (it != s.end())\n        cout \u003C\u003C \"'o' на позиції: \" \u003C\u003C (it - s.begin()) \u003C\u003C \"\\n\"; \u002F\u002F 4\n\n    \u002F\u002F Підрахувати кількість входжень символу через count\n    int countL = static_cast\u003Cint>(count(s.begin(), s.end(), 'l'));\n    cout \u003C\u003C \"Кількість 'l': \" \u003C\u003C countL \u003C\u003C \"\\n\"; \u002F\u002F 3\n\n    \u002F\u002F Знайти підрядок через search (аналог find для ітераторів)\n    string sub = \"World\";\n    auto it2 = search(s.begin(), s.end(), sub.begin(), sub.end());\n    if (it2 != s.end())\n        cout \u003C\u003C \"\\\"World\\\" на позиції: \" \u003C\u003C (it2 - s.begin()) \u003C\u003C \"\\n\"; \u002F\u002F 7\n\n    \u002F\u002F Знайти перший не-символ слова через find_if\n    auto notAlpha = find_if(s.begin(), s.end(),\n        [](unsigned char c) { return !isalpha(c); });\n    if (notAlpha != s.end())\n        cout \u003C\u003C \"Перший не-літерний: '\" \u003C\u003C *notAlpha\n                  \u003C\u003C \"' на позиції \" \u003C\u003C (notAlpha - s.begin()) \u003C\u003C \"\\n\"; \u002F\u002F ',' на 5\n\n    return 0;\n}\n","StlVsStringSearch.cpp",[3272,7847,7848,7854,7860,7870,7874,7884,7888,7896,7900,7908,7912,7917,7953,7969,7999,8003,8008,8051,8072,8076,8081,8090,8135,8150,8187,8191,8196,8225,8253,8268,8278,8307,8311,8319],{"__ignoreMap":3292},[3296,7849,7850,7852],{"class":3298,"line":3299},[3296,7851,3303],{"class":3302},[3296,7853,3307],{"class":3306},[3296,7855,7856,7858],{"class":3298,"line":3310},[3296,7857,3303],{"class":3302},[3296,7859,3315],{"class":3306},[3296,7861,7862,7864,7867],{"class":3298,"line":3318},[3296,7863,3303],{"class":3302},[3296,7865,7866],{"class":3306}," \u003Calgorithm>",[3296,7868,7869],{"class":3408}," \u002F\u002F find, count, search\n",[3296,7871,7872],{"class":3298,"line":3325},[3296,7873,3322],{"emptyLinePlaceholder":3321},[3296,7875,7876,7878,7880,7882],{"class":3298,"line":3343},[3296,7877,3328],{"class":3302},[3296,7879,3332],{"class":3331},[3296,7881,3336],{"class":3335},[3296,7883,3340],{"class":3339},[3296,7885,7886],{"class":3298,"line":3348},[3296,7887,3322],{"emptyLinePlaceholder":3321},[3296,7889,7890,7892,7894],{"class":3298,"line":3361},[3296,7891,3351],{"class":3331},[3296,7893,3355],{"class":3354},[3296,7895,3358],{"class":3339},[3296,7897,7898],{"class":3298,"line":3367},[3296,7899,3364],{"class":3339},[3296,7901,7902,7904,7906],{"class":3298,"line":3378},[3296,7903,3806],{"class":3339},[3296,7905,3809],{"class":3306},[3296,7907,3340],{"class":3339},[3296,7909,7910],{"class":3298,"line":3389},[3296,7911,3322],{"emptyLinePlaceholder":3321},[3296,7913,7914],{"class":3298,"line":3400},[3296,7915,7916],{"class":3408},"    \u002F\u002F Знайти один символ через find\n",[3296,7918,7919,7922,7925,7927,7929,7931,7933,7936,7939,7941,7943,7946,7948,7951],{"class":3298,"line":3405},[3296,7920,7921],{"class":3331},"    auto",[3296,7923,7924],{"class":3339}," it = ",[3296,7926,3428],{"class":3354},[3296,7928,3431],{"class":3339},[3296,7930,3825],{"class":3421},[3296,7932,3425],{"class":3339},[3296,7934,7935],{"class":3354},"begin",[3296,7937,7938],{"class":3339},"(), ",[3296,7940,3825],{"class":3421},[3296,7942,3425],{"class":3339},[3296,7944,7945],{"class":3354},"end",[3296,7947,7938],{"class":3339},[3296,7949,7950],{"class":3306},"'o'",[3296,7952,3478],{"class":3339},[3296,7954,7955,7957,7960,7962,7964,7966],{"class":3298,"line":3412},[3296,7956,3892],{"class":3302},[3296,7958,7959],{"class":3339}," (it != ",[3296,7961,3825],{"class":3421},[3296,7963,3425],{"class":3339},[3296,7965,7945],{"class":3354},[3296,7967,7968],{"class":3339},"())\n",[3296,7970,7971,7973,7976,7979,7981,7983,7985,7988,7990,7992,7994,7996],{"class":3298,"line":3446},[3296,7972,3905],{"class":3339},[3296,7974,7975],{"class":3306},"\"'o' на позиції: \"",[3296,7977,7978],{"class":3339}," \u003C\u003C (it - ",[3296,7980,3825],{"class":3421},[3296,7982,3425],{"class":3339},[3296,7984,7935],{"class":3354},[3296,7986,7987],{"class":3339},"()) \u003C\u003C ",[3296,7989,3517],{"class":3306},[3296,7991,3541],{"class":3513},[3296,7993,3517],{"class":3306},[3296,7995,3546],{"class":3339},[3296,7997,7998],{"class":3408}," \u002F\u002F 4\n",[3296,8000,8001],{"class":3298,"line":3451},[3296,8002,3322],{"emptyLinePlaceholder":3321},[3296,8004,8005],{"class":3298,"line":3457},[3296,8006,8007],{"class":3408},"    \u002F\u002F Підрахувати кількість входжень символу через count\n",[3296,8009,8010,8013,8016,8018,8020,8022,8025,8028,8030,8032,8034,8036,8038,8040,8042,8044,8046,8049],{"class":3298,"line":3481},[3296,8011,8012],{"class":3331},"    int",[3296,8014,8015],{"class":3339}," countL = ",[3296,8017,3726],{"class":3331},[3296,8019,5773],{"class":3339},[3296,8021,3351],{"class":3331},[3296,8023,8024],{"class":3339},">(",[3296,8026,8027],{"class":3354},"count",[3296,8029,3431],{"class":3339},[3296,8031,3825],{"class":3421},[3296,8033,3425],{"class":3339},[3296,8035,7935],{"class":3354},[3296,8037,7938],{"class":3339},[3296,8039,3825],{"class":3421},[3296,8041,3425],{"class":3339},[3296,8043,7945],{"class":3354},[3296,8045,7938],{"class":3339},[3296,8047,8048],{"class":3306},"'l'",[3296,8050,7704],{"class":3339},[3296,8052,8053,8055,8058,8061,8063,8065,8067,8069],{"class":3298,"line":3486},[3296,8054,3530],{"class":3339},[3296,8056,8057],{"class":3306},"\"Кількість 'l': \"",[3296,8059,8060],{"class":3339}," \u003C\u003C countL \u003C\u003C ",[3296,8062,3517],{"class":3306},[3296,8064,3541],{"class":3513},[3296,8066,3517],{"class":3306},[3296,8068,3546],{"class":3339},[3296,8070,8071],{"class":3408}," \u002F\u002F 3\n",[3296,8073,8074],{"class":3298,"line":3492},[3296,8075,3322],{"emptyLinePlaceholder":3321},[3296,8077,8078],{"class":3298,"line":3522},[3296,8079,8080],{"class":3408},"    \u002F\u002F Знайти підрядок через search (аналог find для ітераторів)\n",[3296,8082,8083,8086,8088],{"class":3298,"line":3527},[3296,8084,8085],{"class":3339},"    string sub = ",[3296,8087,3834],{"class":3306},[3296,8089,3340],{"class":3339},[3296,8091,8092,8094,8097,8100,8102,8104,8106,8108,8110,8112,8114,8116,8118,8120,8122,8124,8126,8128,8130,8132],{"class":3298,"line":3552},[3296,8093,7921],{"class":3331},[3296,8095,8096],{"class":3339}," it2 = ",[3296,8098,8099],{"class":3354},"search",[3296,8101,3431],{"class":3339},[3296,8103,3825],{"class":3421},[3296,8105,3425],{"class":3339},[3296,8107,7935],{"class":3354},[3296,8109,7938],{"class":3339},[3296,8111,3825],{"class":3421},[3296,8113,3425],{"class":3339},[3296,8115,7945],{"class":3354},[3296,8117,7938],{"class":3339},[3296,8119,5884],{"class":3421},[3296,8121,3425],{"class":3339},[3296,8123,7935],{"class":3354},[3296,8125,7938],{"class":3339},[3296,8127,5884],{"class":3421},[3296,8129,3425],{"class":3339},[3296,8131,7945],{"class":3354},[3296,8133,8134],{"class":3339},"());\n",[3296,8136,8137,8139,8142,8144,8146,8148],{"class":3298,"line":3574},[3296,8138,3892],{"class":3302},[3296,8140,8141],{"class":3339}," (it2 != ",[3296,8143,3825],{"class":3421},[3296,8145,3425],{"class":3339},[3296,8147,7945],{"class":3354},[3296,8149,7968],{"class":3339},[3296,8151,8152,8154,8156,8158,8160,8162,8165,8168,8170,8172,8174,8176,8178,8180,8182,8184],{"class":3298,"line":3596},[3296,8153,3905],{"class":3339},[3296,8155,3517],{"class":3306},[3296,8157,3910],{"class":3513},[3296,8159,3913],{"class":3306},[3296,8161,3910],{"class":3513},[3296,8163,8164],{"class":3306}," на позиції: \"",[3296,8166,8167],{"class":3339}," \u003C\u003C (it2 - ",[3296,8169,3825],{"class":3421},[3296,8171,3425],{"class":3339},[3296,8173,7935],{"class":3354},[3296,8175,7987],{"class":3339},[3296,8177,3517],{"class":3306},[3296,8179,3541],{"class":3513},[3296,8181,3517],{"class":3306},[3296,8183,3546],{"class":3339},[3296,8185,8186],{"class":3408}," \u002F\u002F 7\n",[3296,8188,8189],{"class":3298,"line":3601},[3296,8190,3322],{"emptyLinePlaceholder":3321},[3296,8192,8193],{"class":3298,"line":3613},[3296,8194,8195],{"class":3408},"    \u002F\u002F Знайти перший не-символ слова через find_if\n",[3296,8197,8198,8200,8203,8206,8208,8210,8212,8214,8216,8218,8220,8222],{"class":3298,"line":4370},[3296,8199,7921],{"class":3331},[3296,8201,8202],{"class":3339}," notAlpha = ",[3296,8204,8205],{"class":3354},"find_if",[3296,8207,3431],{"class":3339},[3296,8209,3825],{"class":3421},[3296,8211,3425],{"class":3339},[3296,8213,7935],{"class":3354},[3296,8215,7938],{"class":3339},[3296,8217,3825],{"class":3421},[3296,8219,3425],{"class":3339},[3296,8221,7945],{"class":3354},[3296,8223,8224],{"class":3339},"(),\n",[3296,8226,8227,8230,8233,8236,8239,8242,8244,8247,8250],{"class":3298,"line":4379},[3296,8228,8229],{"class":3339},"        [](",[3296,8231,8232],{"class":3331},"unsigned",[3296,8234,8235],{"class":3331}," char",[3296,8237,8238],{"class":3421}," c",[3296,8240,8241],{"class":3339},") { ",[3296,8243,7423],{"class":3302},[3296,8245,8246],{"class":3339}," !",[3296,8248,8249],{"class":3354},"isalpha",[3296,8251,8252],{"class":3339},"(c); });\n",[3296,8254,8255,8257,8260,8262,8264,8266],{"class":3298,"line":5098},[3296,8256,3892],{"class":3302},[3296,8258,8259],{"class":3339}," (notAlpha != ",[3296,8261,3825],{"class":3421},[3296,8263,3425],{"class":3339},[3296,8265,7945],{"class":3354},[3296,8267,7968],{"class":3339},[3296,8269,8270,8272,8275],{"class":3298,"line":5103},[3296,8271,3905],{"class":3339},[3296,8273,8274],{"class":3306},"\"Перший не-літерний: '\"",[3296,8276,8277],{"class":3339}," \u003C\u003C *notAlpha\n",[3296,8279,8280,8283,8285,8288,8290,8292,8294,8296,8298,8300,8302,8304],{"class":3298,"line":5112},[3296,8281,8282],{"class":3339},"                  \u003C\u003C ",[3296,8284,4903],{"class":3306},[3296,8286,8287],{"class":3339}," \u003C\u003C (notAlpha - ",[3296,8289,3825],{"class":3421},[3296,8291,3425],{"class":3339},[3296,8293,7935],{"class":3354},[3296,8295,7987],{"class":3339},[3296,8297,3517],{"class":3306},[3296,8299,3541],{"class":3513},[3296,8301,3517],{"class":3306},[3296,8303,3546],{"class":3339},[3296,8305,8306],{"class":3408}," \u002F\u002F ',' на 5\n",[3296,8308,8309],{"class":3298,"line":5517},[3296,8310,3322],{"emptyLinePlaceholder":3321},[3296,8312,8313,8315,8317],{"class":3298,"line":5551},[3296,8314,3604],{"class":3302},[3296,8316,3608],{"class":3607},[3296,8318,3340],{"class":3339},[3296,8320,8321],{"class":3298,"line":5585},[3296,8322,3616],{"class":3339},[3618,8324,8326,8336,8343,8350,8357,8367],{"title":8325},".\u002FStlVsStringSearch",[3622,8327,8329,3630,8332],{"className":8328},[3298],[3296,8330,3629],{"className":8331},[3628],[3632,8333,8335],{"className":8334},[3635],".\u002FStlSearch",[3622,8337,8339,8340],{"className":8338},[3298],"'o' на позиції: ",[3296,8341,6525],{"className":8342},[3653],[3622,8344,8346,8347],{"className":8345},[3298],"Кількість 'l': ",[3296,8348,6093],{"className":8349},[3653],[3622,8351,8353,8354],{"className":8352},[3298],"\"World\" на позиції: ",[3296,8355,4010],{"className":8356},[3653],[3622,8358,8360,8361,5135,8364],{"className":8359},[3298],"Перший не-літерний: '",[3296,8362,5146],{"className":8363},[3653],[3296,8365,3654],{"className":8366},[3653],[3622,8368,3666,8370,3425],{"className":8369},[3298],[3296,8371,3670],{"className":8372},[3644,3635],[3281,8374,8375],{},"Коли що обирати:",[8377,8378,8379,8393],"table",{},[8380,8381,8382],"thead",{},[8383,8384,8385,8390],"tr",{},[8386,8387,8389],"th",{"align":8388},"left","Задача",[8386,8391,8392],{"align":8388},"Кращий варіант",[8394,8395,8396,8408,8418,8428,8438],"tbody",{},[8383,8397,8398,8402],{},[8399,8400,8401],"td",{"align":8388},"Знайти підрядок",[8399,8403,8404,8407],{"align":8388},[3272,8405,8406],{},"s.find(sub)"," — зручніше, читабельніше",[8383,8409,8410,8413],{},[8399,8411,8412],{"align":8388},"Знайти символ із набору",[8399,8414,8415],{"align":8388},[3272,8416,8417],{},"s.find_first_of(chars)",[8383,8419,8420,8423],{},[8399,8421,8422],{"align":8388},"Підрахувати символи",[8399,8424,8425],{"align":8388},[3272,8426,8427],{},"std::count(s.begin(), s.end(), ch)",[8383,8429,8430,8433],{},[8399,8431,8432],{"align":8388},"Знайти за умовою (предикатом)",[8399,8434,8435],{"align":8388},[3272,8436,8437],{},"std::find_if(s.begin(), s.end(), pred)",[8383,8439,8440,8443],{},[8399,8441,8442],{"align":8388},"Знайти підрядок (ітераторний стиль)",[8399,8444,8445],{"align":8388},[3272,8446,8447],{},"std::search(...)",[3678,8449],{},[3276,8451,8453],{"id":8452},"практика","Практика",[4055,8455,8457],{"id":8456},"рівень-1-валідація-рядка","Рівень 1 — Валідація рядка",[3281,8459,8460,8461,8464,8465,8468,8469,8471],{},"Напишіть функцію ",[3272,8462,8463],{},"isValidIdentifier(const std::string& s)",", що перевіряє, чи є рядок коректним ідентифікатором C++ (починається з літери або ",[3272,8466,8467],{},"_",", містить лише літери, цифри та ",[3272,8470,8467],{},").",[8473,8474,8476,8844],"collapsible",{"title":8475},"Розв'язок",[3285,8477,8480],{"className":3287,"code":8478,"filename":8479,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Ccctype>\n\nusing namespace std;\n\nbool isValidIdentifier(const string& s)\n{\n    if (s.empty()) return false;\n\n    \u002F\u002F Перший символ: лише літера або '_'\n    if (!isalpha(static_cast\u003Cunsigned char>(s[0])) && s[0] != '_')\n        return false;\n\n    \u002F\u002F Решта символів: літери, цифри або '_'\n    \u002F\u002F find_first_not_of перевіряє, чи є хоч один «чужий» символ\n    const string allowed =\n        \"abcdefghijklmnopqrstuvwxyz\"\n        \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n        \"0123456789_\";\n\n    return s.find_first_not_of(allowed) == string::npos;\n}\n\nint main()\n{\n    cout \u003C\u003C boolalpha;\n    cout \u003C\u003C isValidIdentifier(\"myVar\")    \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C isValidIdentifier(\"_count\")   \u003C\u003C \"\\n\"; \u002F\u002F true\n    cout \u003C\u003C isValidIdentifier(\"2fast\")    \u003C\u003C \"\\n\"; \u002F\u002F false (починається з цифри)\n    cout \u003C\u003C isValidIdentifier(\"my-var\")   \u003C\u003C \"\\n\"; \u002F\u002F false (тире заборонено)\n    cout \u003C\u003C isValidIdentifier(\"\")         \u003C\u003C \"\\n\"; \u002F\u002F false (порожній)\n\n    return 0;\n}\n","ValidIdentifier.cpp",[3272,8481,8482,8488,8494,8501,8505,8515,8519,8539,8543,8565,8569,8574,8618,8626,8630,8635,8640,8647,8652,8657,8664,8668,8685,8689,8693,8701,8705,8709,8733,8756,8780,8804,8828,8832,8840],{"__ignoreMap":3292},[3296,8483,8484,8486],{"class":3298,"line":3299},[3296,8485,3303],{"class":3302},[3296,8487,3307],{"class":3306},[3296,8489,8490,8492],{"class":3298,"line":3310},[3296,8491,3303],{"class":3302},[3296,8493,3315],{"class":3306},[3296,8495,8496,8498],{"class":3298,"line":3318},[3296,8497,3303],{"class":3302},[3296,8499,8500],{"class":3306}," \u003Ccctype>\n",[3296,8502,8503],{"class":3298,"line":3325},[3296,8504,3322],{"emptyLinePlaceholder":3321},[3296,8506,8507,8509,8511,8513],{"class":3298,"line":3343},[3296,8508,3328],{"class":3302},[3296,8510,3332],{"class":3331},[3296,8512,3336],{"class":3335},[3296,8514,3340],{"class":3339},[3296,8516,8517],{"class":3298,"line":3348},[3296,8518,3322],{"emptyLinePlaceholder":3321},[3296,8520,8521,8524,8527,8529,8531,8533,8535,8537],{"class":3298,"line":3361},[3296,8522,8523],{"class":3331},"bool",[3296,8525,8526],{"class":3354}," isValidIdentifier",[3296,8528,3431],{"class":3339},[3296,8530,5786],{"class":3331},[3296,8532,5789],{"class":3335},[3296,8534,5792],{"class":3331},[3296,8536,5795],{"class":3421},[3296,8538,5809],{"class":3339},[3296,8540,8541],{"class":3298,"line":3367},[3296,8542,3364],{"class":3339},[3296,8544,8545,8547,8549,8551,8553,8555,8558,8560,8563],{"class":3298,"line":3378},[3296,8546,3892],{"class":3302},[3296,8548,6007],{"class":3339},[3296,8550,3825],{"class":3421},[3296,8552,3425],{"class":3339},[3296,8554,7582],{"class":3354},[3296,8556,8557],{"class":3339},"()) ",[3296,8559,7423],{"class":3302},[3296,8561,8562],{"class":3331}," false",[3296,8564,3340],{"class":3339},[3296,8566,8567],{"class":3298,"line":3389},[3296,8568,3322],{"emptyLinePlaceholder":3321},[3296,8570,8571],{"class":3298,"line":3400},[3296,8572,8573],{"class":3408},"    \u002F\u002F Перший символ: лише літера або '_'\n",[3296,8575,8576,8578,8581,8583,8585,8587,8589,8591,8593,8595,8597,8599,8601,8604,8606,8608,8610,8613,8616],{"class":3298,"line":3405},[3296,8577,3892],{"class":3302},[3296,8579,8580],{"class":3339}," (!",[3296,8582,8249],{"class":3354},[3296,8584,3431],{"class":3339},[3296,8586,3726],{"class":3331},[3296,8588,5773],{"class":3339},[3296,8590,8232],{"class":3331},[3296,8592,8235],{"class":3331},[3296,8594,8024],{"class":3339},[3296,8596,3825],{"class":3421},[3296,8598,7590],{"class":3339},[3296,8600,4401],{"class":3607},[3296,8602,8603],{"class":3339},"])) && ",[3296,8605,3825],{"class":3421},[3296,8607,7590],{"class":3339},[3296,8609,4401],{"class":3607},[3296,8611,8612],{"class":3339},"] != ",[3296,8614,8615],{"class":3306},"'_'",[3296,8617,5809],{"class":3339},[3296,8619,8620,8622,8624],{"class":3298,"line":3412},[3296,8621,6679],{"class":3302},[3296,8623,8562],{"class":3331},[3296,8625,3340],{"class":3339},[3296,8627,8628],{"class":3298,"line":3446},[3296,8629,3322],{"emptyLinePlaceholder":3321},[3296,8631,8632],{"class":3298,"line":3451},[3296,8633,8634],{"class":3408},"    \u002F\u002F Решта символів: літери, цифри або '_'\n",[3296,8636,8637],{"class":3298,"line":3457},[3296,8638,8639],{"class":3408},"    \u002F\u002F find_first_not_of перевіряє, чи є хоч один «чужий» символ\n",[3296,8641,8642,8644],{"class":3298,"line":3481},[3296,8643,6634],{"class":3331},[3296,8645,8646],{"class":3339}," string allowed =\n",[3296,8648,8649],{"class":3298,"line":3486},[3296,8650,8651],{"class":3306},"        \"abcdefghijklmnopqrstuvwxyz\"\n",[3296,8653,8654],{"class":3298,"line":3492},[3296,8655,8656],{"class":3306},"        \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n",[3296,8658,8659,8662],{"class":3298,"line":3522},[3296,8660,8661],{"class":3306},"        \"0123456789_\"",[3296,8663,3340],{"class":3339},[3296,8665,8666],{"class":3298,"line":3527},[3296,8667,3322],{"emptyLinePlaceholder":3321},[3296,8669,8670,8672,8674,8676,8678,8681,8683],{"class":3298,"line":3552},[3296,8671,3604],{"class":3302},[3296,8673,5795],{"class":3421},[3296,8675,3425],{"class":3339},[3296,8677,3505],{"class":3354},[3296,8679,8680],{"class":3339},"(allowed) == ",[3296,8682,3440],{"class":3335},[3296,8684,3443],{"class":3339},[3296,8686,8687],{"class":3298,"line":3574},[3296,8688,3616],{"class":3339},[3296,8690,8691],{"class":3298,"line":3596},[3296,8692,3322],{"emptyLinePlaceholder":3321},[3296,8694,8695,8697,8699],{"class":3298,"line":3601},[3296,8696,3351],{"class":3331},[3296,8698,3355],{"class":3354},[3296,8700,3358],{"class":3339},[3296,8702,8703],{"class":3298,"line":3613},[3296,8704,3364],{"class":3339},[3296,8706,8707],{"class":3298,"line":4370},[3296,8708,5514],{"class":3339},[3296,8710,8711,8713,8716,8718,8721,8723,8725,8727,8729,8731],{"class":3298,"line":4379},[3296,8712,3530],{"class":3339},[3296,8714,8715],{"class":3354},"isValidIdentifier",[3296,8717,3431],{"class":3339},[3296,8719,8720],{"class":3306},"\"myVar\"",[3296,8722,6794],{"class":3339},[3296,8724,3517],{"class":3306},[3296,8726,3541],{"class":3513},[3296,8728,3517],{"class":3306},[3296,8730,3546],{"class":3339},[3296,8732,3549],{"class":3408},[3296,8734,8735,8737,8739,8741,8744,8746,8748,8750,8752,8754],{"class":3298,"line":5098},[3296,8736,3530],{"class":3339},[3296,8738,8715],{"class":3354},[3296,8740,3431],{"class":3339},[3296,8742,8743],{"class":3306},"\"_count\"",[3296,8745,7211],{"class":3339},[3296,8747,3517],{"class":3306},[3296,8749,3541],{"class":3513},[3296,8751,3517],{"class":3306},[3296,8753,3546],{"class":3339},[3296,8755,3549],{"class":3408},[3296,8757,8758,8760,8762,8764,8767,8769,8771,8773,8775,8777],{"class":3298,"line":5103},[3296,8759,3530],{"class":3339},[3296,8761,8715],{"class":3354},[3296,8763,3431],{"class":3339},[3296,8765,8766],{"class":3306},"\"2fast\"",[3296,8768,6794],{"class":3339},[3296,8770,3517],{"class":3306},[3296,8772,3541],{"class":3513},[3296,8774,3517],{"class":3306},[3296,8776,3546],{"class":3339},[3296,8778,8779],{"class":3408}," \u002F\u002F false (починається з цифри)\n",[3296,8781,8782,8784,8786,8788,8791,8793,8795,8797,8799,8801],{"class":3298,"line":5112},[3296,8783,3530],{"class":3339},[3296,8785,8715],{"class":3354},[3296,8787,3431],{"class":3339},[3296,8789,8790],{"class":3306},"\"my-var\"",[3296,8792,7211],{"class":3339},[3296,8794,3517],{"class":3306},[3296,8796,3541],{"class":3513},[3296,8798,3517],{"class":3306},[3296,8800,3546],{"class":3339},[3296,8802,8803],{"class":3408}," \u002F\u002F false (тире заборонено)\n",[3296,8805,8806,8808,8810,8812,8815,8817,8819,8821,8823,8825],{"class":3298,"line":5517},[3296,8807,3530],{"class":3339},[3296,8809,8715],{"class":3354},[3296,8811,3431],{"class":3339},[3296,8813,8814],{"class":3306},"\"\"",[3296,8816,6846],{"class":3339},[3296,8818,3517],{"class":3306},[3296,8820,3541],{"class":3513},[3296,8822,3517],{"class":3306},[3296,8824,3546],{"class":3339},[3296,8826,8827],{"class":3408}," \u002F\u002F false (порожній)\n",[3296,8829,8830],{"class":3298,"line":5551},[3296,8831,3322],{"emptyLinePlaceholder":3321},[3296,8833,8834,8836,8838],{"class":3298,"line":5585},[3296,8835,3604],{"class":3302},[3296,8837,3608],{"class":3607},[3296,8839,3340],{"class":3339},[3296,8841,8842],{"class":3298,"line":5590},[3296,8843,3616],{"class":3339},[3618,8845,8847,8857,8863,8869,8875,8881,8887],{"title":8846},".\u002FValidIdentifier",[3622,8848,8850,3630,8853],{"className":8849},[3298],[3296,8851,3629],{"className":8852},[3628],[3632,8854,8856],{"className":8855},[3635],".\u002FTask1",[3622,8858,8860],{"className":8859},[3298],[3296,8861,3645],{"className":8862},[3644,3635],[3622,8864,8866],{"className":8865},[3298],[3296,8867,3645],{"className":8868},[3644,3635],[3622,8870,8872],{"className":8871},[3298],[3296,8873,5637],{"className":8874},[5636],[3622,8876,8878],{"className":8877},[3298],[3296,8879,5637],{"className":8880},[5636],[3622,8882,8884],{"className":8883},[3298],[3296,8885,5637],{"className":8886},[5636],[3622,8888,3666,8890,3425],{"className":8889},[3298],[3296,8891,3670],{"className":8892},[3644,3635],[4055,8894,8896,8897,8899],{"id":8895},"рівень-2-функція-split-із-рядком-роздільником","Рівень 2 — Функція ",[3272,8898,6140],{}," із рядком-роздільником",[3281,8901,8902,8903,8905,8906,8909],{},"Узагальніть функцію ",[3272,8904,6140],{}," зі зразка вище: роздільником має бути не символ, а ",[3632,8907,8908],{},"підрядок"," довільної довжини.",[8473,8911,8912,9349],{"title":8475},[3285,8913,8916],{"className":3287,"code":8914,"filename":8915,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nusing namespace std;\n\nvector\u003Cstring> split(const string& s,\n                                const string& delimiter)\n{\n    vector\u003Cstring> tokens;\n\n    if (delimiter.empty())\n    {\n        tokens.push_back(s);\n        return tokens;\n    }\n\n    size_t start = 0;\n    size_t pos   = s.find(delimiter);\n\n    while (pos != string::npos)\n    {\n        tokens.push_back(s.substr(start, pos - start));\n        start = pos + delimiter.length();\n        pos   = s.find(delimiter, start);\n    }\n\n    tokens.push_back(s.substr(start));\n    return tokens;\n}\n\nint main()\n{\n    \u002F\u002F Розбити HTTP-заголовок за \": \"\n    string header = \"Content-Type: text\u002Fhtml; charset=utf-8\";\n    auto parts = split(header, \": \");\n    for (const auto& p : parts)\n        cout \u003C\u003C \"[\" \u003C\u003C p \u003C\u003C \"]\\n\";\n\n    cout \u003C\u003C \"\\n\";\n\n    \u002F\u002F Розбити SQL за \" AND \"\n    string cond = \"age > 18 AND city = 'Kyiv' AND active = 1\";\n    auto clauses = split(cond, \" AND \");\n    for (const auto& c : clauses)\n        cout \u003C\u003C \"  * \" \u003C\u003C c \u003C\u003C \"\\n\";\n\n    return 0;\n}\n","SplitByDelimiter.cpp",[3272,8917,8918,8924,8930,8936,8940,8950,8954,8978,8991,8995,8999,9003,9018,9022,9033,9039,9043,9047,9057,9071,9075,9085,9089,9107,9120,9132,9136,9140,9158,9164,9168,9172,9180,9184,9189,9199,9216,9230,9246,9250,9262,9266,9271,9281,9298,9311,9330,9335,9344],{"__ignoreMap":3292},[3296,8919,8920,8922],{"class":3298,"line":3299},[3296,8921,3303],{"class":3302},[3296,8923,3307],{"class":3306},[3296,8925,8926,8928],{"class":3298,"line":3310},[3296,8927,3303],{"class":3302},[3296,8929,3315],{"class":3306},[3296,8931,8932,8934],{"class":3298,"line":3318},[3296,8933,3303],{"class":3302},[3296,8935,5747],{"class":3306},[3296,8937,8938],{"class":3298,"line":3325},[3296,8939,3322],{"emptyLinePlaceholder":3321},[3296,8941,8942,8944,8946,8948],{"class":3298,"line":3343},[3296,8943,3328],{"class":3302},[3296,8945,3332],{"class":3331},[3296,8947,3336],{"class":3335},[3296,8949,3340],{"class":3339},[3296,8951,8952],{"class":3298,"line":3348},[3296,8953,3322],{"emptyLinePlaceholder":3321},[3296,8955,8956,8958,8960,8962,8964,8966,8968,8970,8972,8974,8976],{"class":3298,"line":3361},[3296,8957,5770],{"class":3335},[3296,8959,5773],{"class":3339},[3296,8961,3440],{"class":3335},[3296,8963,5778],{"class":3339},[3296,8965,6140],{"class":3354},[3296,8967,3431],{"class":3339},[3296,8969,5786],{"class":3331},[3296,8971,5789],{"class":3335},[3296,8973,5792],{"class":3331},[3296,8975,5795],{"class":3421},[3296,8977,7499],{"class":3339},[3296,8979,8980,8983,8985,8987,8989],{"class":3298,"line":3367},[3296,8981,8982],{"class":3331},"                                const",[3296,8984,5789],{"class":3335},[3296,8986,5792],{"class":3331},[3296,8988,6215],{"class":3421},[3296,8990,5809],{"class":3339},[3296,8992,8993],{"class":3298,"line":3378},[3296,8994,3364],{"class":3339},[3296,8996,8997],{"class":3298,"line":3389},[3296,8998,6226],{"class":3339},[3296,9000,9001],{"class":3298,"line":3400},[3296,9002,3322],{"emptyLinePlaceholder":3321},[3296,9004,9005,9007,9009,9012,9014,9016],{"class":3298,"line":3405},[3296,9006,3892],{"class":3302},[3296,9008,6007],{"class":3339},[3296,9010,9011],{"class":3421},"delimiter",[3296,9013,3425],{"class":3339},[3296,9015,7582],{"class":3354},[3296,9017,7968],{"class":3339},[3296,9019,9020],{"class":3298,"line":3412},[3296,9021,5352],{"class":3339},[3296,9023,9024,9026,9028,9030],{"class":3298,"line":3446},[3296,9025,6276],{"class":3421},[3296,9027,3425],{"class":3339},[3296,9029,5873],{"class":3354},[3296,9031,9032],{"class":3339},"(s);\n",[3296,9034,9035,9037],{"class":3298,"line":3451},[3296,9036,6679],{"class":3302},[3296,9038,6358],{"class":3339},[3296,9040,9041],{"class":3298,"line":3457},[3296,9042,5370],{"class":3339},[3296,9044,9045],{"class":3298,"line":3481},[3296,9046,3322],{"emptyLinePlaceholder":3321},[3296,9048,9049,9051,9053,9055],{"class":3298,"line":3486},[3296,9050,3460],{"class":3331},[3296,9052,3497],{"class":3339},[3296,9054,4401],{"class":3607},[3296,9056,3340],{"class":3339},[3296,9058,9059,9061,9063,9065,9067,9069],{"class":3298,"line":3492},[3296,9060,3460],{"class":3331},[3296,9062,6243],{"class":3339},[3296,9064,3825],{"class":3421},[3296,9066,3425],{"class":3339},[3296,9068,3428],{"class":3354},[3296,9070,6252],{"class":3339},[3296,9072,9073],{"class":3298,"line":3522},[3296,9074,3322],{"emptyLinePlaceholder":3321},[3296,9076,9077,9079,9081,9083],{"class":3298,"line":3527},[3296,9078,5843],{"class":3302},[3296,9080,6263],{"class":3339},[3296,9082,3440],{"class":3335},[3296,9084,3900],{"class":3339},[3296,9086,9087],{"class":3298,"line":3552},[3296,9088,5352],{"class":3339},[3296,9090,9091,9093,9095,9097,9099,9101,9103,9105],{"class":3298,"line":3574},[3296,9092,6276],{"class":3421},[3296,9094,3425],{"class":3339},[3296,9096,5873],{"class":3354},[3296,9098,3431],{"class":3339},[3296,9100,3825],{"class":3421},[3296,9102,3425],{"class":3339},[3296,9104,4556],{"class":3354},[3296,9106,6291],{"class":3339},[3296,9108,9109,9111,9113,9115,9117],{"class":3298,"line":3596},[3296,9110,6296],{"class":3339},[3296,9112,9011],{"class":3421},[3296,9114,3425],{"class":3339},[3296,9116,5889],{"class":3354},[3296,9118,9119],{"class":3339},"();\n",[3296,9121,9122,9124,9126,9128,9130],{"class":3298,"line":3601},[3296,9123,6305],{"class":3339},[3296,9125,3825],{"class":3421},[3296,9127,3425],{"class":3339},[3296,9129,3428],{"class":3354},[3296,9131,6314],{"class":3339},[3296,9133,9134],{"class":3298,"line":3613},[3296,9135,5370],{"class":3339},[3296,9137,9138],{"class":3298,"line":4370},[3296,9139,3322],{"emptyLinePlaceholder":3321},[3296,9141,9142,9144,9146,9148,9150,9152,9154,9156],{"class":3298,"line":4379},[3296,9143,6332],{"class":3421},[3296,9145,3425],{"class":3339},[3296,9147,5873],{"class":3354},[3296,9149,3431],{"class":3339},[3296,9151,3825],{"class":3421},[3296,9153,3425],{"class":3339},[3296,9155,4556],{"class":3354},[3296,9157,6347],{"class":3339},[3296,9159,9160,9162],{"class":3298,"line":5098},[3296,9161,3604],{"class":3302},[3296,9163,6358],{"class":3339},[3296,9165,9166],{"class":3298,"line":5103},[3296,9167,3616],{"class":3339},[3296,9169,9170],{"class":3298,"line":5112},[3296,9171,3322],{"emptyLinePlaceholder":3321},[3296,9173,9174,9176,9178],{"class":3298,"line":5517},[3296,9175,3351],{"class":3331},[3296,9177,3355],{"class":3354},[3296,9179,3358],{"class":3339},[3296,9181,9182],{"class":3298,"line":5551},[3296,9183,3364],{"class":3339},[3296,9185,9186],{"class":3298,"line":5585},[3296,9187,9188],{"class":3408},"    \u002F\u002F Розбити HTTP-заголовок за \": \"\n",[3296,9190,9191,9194,9197],{"class":3298,"line":5590},[3296,9192,9193],{"class":3339},"    string header = ",[3296,9195,9196],{"class":3306},"\"Content-Type: text\u002Fhtml; charset=utf-8\"",[3296,9198,3340],{"class":3339},[3296,9200,9201,9203,9206,9208,9211,9214],{"class":3298,"line":5599},[3296,9202,7921],{"class":3331},[3296,9204,9205],{"class":3339}," parts = ",[3296,9207,6140],{"class":3354},[3296,9209,9210],{"class":3339},"(header, ",[3296,9212,9213],{"class":3306},"\": \"",[3296,9215,3478],{"class":3339},[3296,9217,9218,9220,9222,9224,9227],{"class":3298,"line":7655},[3296,9219,6004],{"class":3302},[3296,9221,6007],{"class":3339},[3296,9223,5786],{"class":3331},[3296,9225,9226],{"class":3331}," auto",[3296,9228,9229],{"class":3339},"& p : parts)\n",[3296,9231,9232,9234,9236,9238,9240,9242,9244],{"class":3298,"line":7660},[3296,9233,3905],{"class":3339},[3296,9235,7717],{"class":3306},[3296,9237,6022],{"class":3339},[3296,9239,7729],{"class":3306},[3296,9241,3541],{"class":3513},[3296,9243,3517],{"class":3306},[3296,9245,3340],{"class":3339},[3296,9247,9248],{"class":3298,"line":7683},[3296,9249,3322],{"emptyLinePlaceholder":3321},[3296,9251,9252,9254,9256,9258,9260],{"class":3298,"line":7707},[3296,9253,3530],{"class":3339},[3296,9255,3517],{"class":3306},[3296,9257,3541],{"class":3513},[3296,9259,3517],{"class":3306},[3296,9261,3340],{"class":3339},[3296,9263,9264],{"class":3298,"line":7712},[3296,9265,3322],{"emptyLinePlaceholder":3321},[3296,9267,9268],{"class":3298,"line":7738},[3296,9269,9270],{"class":3408},"    \u002F\u002F Розбити SQL за \" AND \"\n",[3296,9272,9273,9276,9279],{"class":3298,"line":7743},[3296,9274,9275],{"class":3339},"    string cond = ",[3296,9277,9278],{"class":3306},"\"age > 18 AND city = 'Kyiv' AND active = 1\"",[3296,9280,3340],{"class":3339},[3296,9282,9283,9285,9288,9290,9293,9296],{"class":3298,"line":7748},[3296,9284,7921],{"class":3331},[3296,9286,9287],{"class":3339}," clauses = ",[3296,9289,6140],{"class":3354},[3296,9291,9292],{"class":3339},"(cond, ",[3296,9294,9295],{"class":3306},"\" AND \"",[3296,9297,3478],{"class":3339},[3296,9299,9300,9302,9304,9306,9308],{"class":3298,"line":7757},[3296,9301,6004],{"class":3302},[3296,9303,6007],{"class":3339},[3296,9305,5786],{"class":3331},[3296,9307,9226],{"class":3331},[3296,9309,9310],{"class":3339},"& c : clauses)\n",[3296,9312,9314,9316,9319,9322,9324,9326,9328],{"class":3298,"line":9313},46,[3296,9315,3905],{"class":3339},[3296,9317,9318],{"class":3306},"\"  * \"",[3296,9320,9321],{"class":3339}," \u003C\u003C c \u003C\u003C ",[3296,9323,3517],{"class":3306},[3296,9325,3541],{"class":3513},[3296,9327,3517],{"class":3306},[3296,9329,3340],{"class":3339},[3296,9331,9333],{"class":3298,"line":9332},47,[3296,9334,3322],{"emptyLinePlaceholder":3321},[3296,9336,9338,9340,9342],{"class":3298,"line":9337},48,[3296,9339,3604],{"class":3302},[3296,9341,3608],{"class":3607},[3296,9343,3340],{"class":3339},[3296,9345,9347],{"class":3298,"line":9346},49,[3296,9348,3616],{"class":3339},[3618,9350,9352,9362,9369,9376,9379,9387,9394,9401],{"title":9351},".\u002FSplitByDelimiter",[3622,9353,9355,3630,9358],{"className":9354},[3298],[3296,9356,3629],{"className":9357},[3628],[3632,9359,9361],{"className":9360},[3635],".\u002FTask2",[3622,9363,7590,9365,7784],{"className":9364},[3298],[3296,9366,9368],{"className":9367},[3653],"Content-Type",[3622,9370,7590,9372,7784],{"className":9371},[3298],[3296,9373,9375],{"className":9374},[3653],"text\u002Fhtml; charset=utf-8",[3622,9377],{"className":9378},[3298],[3622,9380,9382,9383],{"className":9381},[3298],"  * ",[3296,9384,9386],{"className":9385},[3653],"age > 18",[3622,9388,9382,9390],{"className":9389},[3298],[3296,9391,9393],{"className":9392},[3653],"city = 'Kyiv'",[3622,9395,9382,9397],{"className":9396},[3298],[3296,9398,9400],{"className":9399},[3653],"active = 1",[3622,9402,3666,9404,3425],{"className":9403},[3298],[3296,9405,3670],{"className":9406},[3644,3635],[4055,9408,9410],{"id":9409},"рівень-3-парсер-ini-env-конфігурації","Рівень 3 — Парсер .ini \u002F .env конфігурації",[3281,9412,9413,9414,4038,9417,9420,9421,9424,9425,9428,9429,3425],{},"Напишіть функцію, що зчитує конфігурацію з рядка у форматі ",[3272,9415,9416],{},".env",[3272,9418,9419],{},"KEY=value",", ігноруючи порожні рядки, коментарі (",[3272,9422,9423],{},"#",") та пробіли навколо ",[3272,9426,9427],{},"=",". Результат повертається як вектор пар ",[3272,9430,9431],{},"{key, value}",[8473,9433,9434,10391],{"title":8475},[3285,9435,9438],{"className":3287,"code":9436,"filename":9437,"language":3290,"meta":3291,"style":3292},"#include \u003Ciostream>\n#include \u003Cstring>\n#include \u003Cvector>\n\nusing namespace std;\n\nstruct ConfigEntry\n{\n    string key;\n    string value;\n};\n\nstring trim(const string& s)\n{\n    const string ws = \" \\t\\r\\n\";\n    size_t a = s.find_first_not_of(ws);\n    if (a == string::npos) return \"\";\n    return s.substr(a, s.find_last_not_of(ws) - a + 1);\n}\n\n\u002F\u002F Розбити багаторядковий текст на рядки\nvector\u003Cstring> splitLines(const string& text)\n{\n    vector\u003Cstring> lines;\n    size_t start = 0, pos = text.find('\\n');\n    while (pos != string::npos)\n    {\n        lines.push_back(text.substr(start, pos - start));\n        start = pos + 1;\n        pos   = text.find('\\n', start);\n    }\n    lines.push_back(text.substr(start));\n    return lines;\n}\n\nvector\u003CConfigEntry> parseEnv(const string& text)\n{\n    vector\u003CConfigEntry> result;\n\n    for (const string& rawLine : splitLines(text))\n    {\n        string line = trim(rawLine);\n\n        if (line.empty() || line[0] == '#')\n            continue; \u002F\u002F порожній рядок або коментар\n\n        size_t eq = line.find('=');\n        if (eq == string::npos || eq == 0)\n            continue; \u002F\u002F немає '=' або ключ порожній\n\n        ConfigEntry entry;\n        entry.key   = trim(line.substr(0, eq));\n        entry.value = trim(line.substr(eq + 1));\n\n        \u002F\u002F Прибрати лапки зі значення: \"value\" → value\n        if (entry.value.length() >= 2\n            && entry.value.front() == '\"'\n            && entry.value.back()  == '\"')\n        {\n            entry.value = entry.value.substr(1, entry.value.length() - 2);\n        }\n\n        result.push_back(entry);\n    }\n\n    return result;\n}\n\nint main()\n{\n    const string envText =\n        \"# Database settings\\n\"\n        \"DB_HOST = localhost\\n\"\n        \"DB_PORT = 5432\\n\"\n        \"DB_NAME = \\\"myapp_db\\\"\\n\"\n        \"\\n\"\n        \"# App settings\\n\"\n        \"APP_DEBUG = true\\n\"\n        \"  APP_SECRET = \\\"s3cr3t_key\\\"  \\n\";\n\n    auto config = parseEnv(envText);\n\n    for (const auto& entry : config)\n        cout \u003C\u003C entry.key \u003C\u003C \" => \" \u003C\u003C entry.value \u003C\u003C \"\\n\";\n\n    return 0;\n}\n","ConfigParser.cpp",[3272,9439,9440,9446,9452,9458,9462,9472,9476,9484,9488,9493,9498,9503,9507,9525,9529,9543,9557,9573,9599,9603,9607,9612,9638,9642,9647,9674,9684,9688,9707,9715,9736,9740,9759,9766,9770,9774,9800,9804,9809,9813,9829,9833,9843,9847,9873,9882,9886,9904,9919,9928,9933,9939,9969,9998,10003,10009,10033,10056,10080,10086,10131,10137,10142,10155,10160,10165,10173,10178,10183,10192,10197,10205,10216,10226,10236,10251,10261,10271,10281,10301,10306,10319,10324,10338,10372,10377,10386],{"__ignoreMap":3292},[3296,9441,9442,9444],{"class":3298,"line":3299},[3296,9443,3303],{"class":3302},[3296,9445,3307],{"class":3306},[3296,9447,9448,9450],{"class":3298,"line":3310},[3296,9449,3303],{"class":3302},[3296,9451,3315],{"class":3306},[3296,9453,9454,9456],{"class":3298,"line":3318},[3296,9455,3303],{"class":3302},[3296,9457,5747],{"class":3306},[3296,9459,9460],{"class":3298,"line":3325},[3296,9461,3322],{"emptyLinePlaceholder":3321},[3296,9463,9464,9466,9468,9470],{"class":3298,"line":3343},[3296,9465,3328],{"class":3302},[3296,9467,3332],{"class":3331},[3296,9469,3336],{"class":3335},[3296,9471,3340],{"class":3339},[3296,9473,9474],{"class":3298,"line":3348},[3296,9475,3322],{"emptyLinePlaceholder":3321},[3296,9477,9478,9481],{"class":3298,"line":3361},[3296,9479,9480],{"class":3331},"struct",[3296,9482,9483],{"class":3335}," ConfigEntry\n",[3296,9485,9486],{"class":3298,"line":3367},[3296,9487,3364],{"class":3339},[3296,9489,9490],{"class":3298,"line":3378},[3296,9491,9492],{"class":3339},"    string key;\n",[3296,9494,9495],{"class":3298,"line":3389},[3296,9496,9497],{"class":3339},"    string value;\n",[3296,9499,9500],{"class":3298,"line":3400},[3296,9501,9502],{"class":3339},"};\n",[3296,9504,9505],{"class":3298,"line":3405},[3296,9506,3322],{"emptyLinePlaceholder":3321},[3296,9508,9509,9511,9513,9515,9517,9519,9521,9523],{"class":3298,"line":3412},[3296,9510,3440],{"class":3335},[3296,9512,6613],{"class":3354},[3296,9514,3431],{"class":3339},[3296,9516,5786],{"class":3331},[3296,9518,5789],{"class":3335},[3296,9520,5792],{"class":3331},[3296,9522,5795],{"class":3421},[3296,9524,5809],{"class":3339},[3296,9526,9527],{"class":3298,"line":3446},[3296,9528,3364],{"class":3339},[3296,9530,9531,9533,9535,9537,9539,9541],{"class":3298,"line":3451},[3296,9532,6634],{"class":3331},[3296,9534,7384],{"class":3339},[3296,9536,3510],{"class":3306},[3296,9538,5305],{"class":3513},[3296,9540,3517],{"class":3306},[3296,9542,3340],{"class":3339},[3296,9544,9545,9547,9549,9551,9553,9555],{"class":3298,"line":3457},[3296,9546,3460],{"class":3331},[3296,9548,7399],{"class":3339},[3296,9550,3825],{"class":3421},[3296,9552,3425],{"class":3339},[3296,9554,3505],{"class":3354},[3296,9556,7408],{"class":3339},[3296,9558,9559,9561,9563,9565,9567,9569,9571],{"class":3298,"line":3481},[3296,9560,3892],{"class":3302},[3296,9562,7415],{"class":3339},[3296,9564,3440],{"class":3335},[3296,9566,7420],{"class":3339},[3296,9568,7423],{"class":3302},[3296,9570,6682],{"class":3306},[3296,9572,3340],{"class":3339},[3296,9574,9575,9577,9579,9581,9583,9586,9588,9590,9592,9595,9597],{"class":3298,"line":3486},[3296,9576,3604],{"class":3302},[3296,9578,5795],{"class":3421},[3296,9580,3425],{"class":3339},[3296,9582,4556],{"class":3354},[3296,9584,9585],{"class":3339},"(a, ",[3296,9587,3825],{"class":3421},[3296,9589,3425],{"class":3339},[3296,9591,5208],{"class":3354},[3296,9593,9594],{"class":3339},"(ws) - a + ",[3296,9596,3732],{"class":3607},[3296,9598,3478],{"class":3339},[3296,9600,9601],{"class":3298,"line":3492},[3296,9602,3616],{"class":3339},[3296,9604,9605],{"class":3298,"line":3522},[3296,9606,3322],{"emptyLinePlaceholder":3321},[3296,9608,9609],{"class":3298,"line":3527},[3296,9610,9611],{"class":3408},"\u002F\u002F Розбити багаторядковий текст на рядки\n",[3296,9613,9614,9616,9618,9620,9622,9625,9627,9629,9631,9633,9636],{"class":3298,"line":3552},[3296,9615,5770],{"class":3335},[3296,9617,5773],{"class":3339},[3296,9619,3440],{"class":3335},[3296,9621,5778],{"class":3339},[3296,9623,9624],{"class":3354},"splitLines",[3296,9626,3431],{"class":3339},[3296,9628,5786],{"class":3331},[3296,9630,5789],{"class":3335},[3296,9632,5792],{"class":3331},[3296,9634,9635],{"class":3421}," text",[3296,9637,5809],{"class":3339},[3296,9639,9640],{"class":3298,"line":3574},[3296,9641,3364],{"class":3339},[3296,9643,9644],{"class":3298,"line":3596},[3296,9645,9646],{"class":3339},"    vector\u003Cstring> lines;\n",[3296,9648,9649,9651,9653,9655,9658,9660,9662,9664,9666,9668,9670,9672],{"class":3298,"line":3601},[3296,9650,3460],{"class":3331},[3296,9652,3497],{"class":3339},[3296,9654,4401],{"class":3607},[3296,9656,9657],{"class":3339},", pos = ",[3296,9659,6034],{"class":3421},[3296,9661,3425],{"class":3339},[3296,9663,3428],{"class":3354},[3296,9665,3431],{"class":3339},[3296,9667,5617],{"class":3306},[3296,9669,3541],{"class":3513},[3296,9671,5617],{"class":3306},[3296,9673,3478],{"class":3339},[3296,9675,9676,9678,9680,9682],{"class":3298,"line":3613},[3296,9677,5843],{"class":3302},[3296,9679,6263],{"class":3339},[3296,9681,3440],{"class":3335},[3296,9683,3900],{"class":3339},[3296,9685,9686],{"class":3298,"line":4370},[3296,9687,5352],{"class":3339},[3296,9689,9690,9693,9695,9697,9699,9701,9703,9705],{"class":3298,"line":4379},[3296,9691,9692],{"class":3421},"        lines",[3296,9694,3425],{"class":3339},[3296,9696,5873],{"class":3354},[3296,9698,3431],{"class":3339},[3296,9700,6034],{"class":3421},[3296,9702,3425],{"class":3339},[3296,9704,4556],{"class":3354},[3296,9706,6291],{"class":3339},[3296,9708,9709,9711,9713],{"class":3298,"line":5098},[3296,9710,6296],{"class":3339},[3296,9712,3732],{"class":3607},[3296,9714,3340],{"class":3339},[3296,9716,9717,9719,9721,9723,9725,9727,9729,9731,9733],{"class":3298,"line":5103},[3296,9718,6305],{"class":3339},[3296,9720,6034],{"class":3421},[3296,9722,3425],{"class":3339},[3296,9724,3428],{"class":3354},[3296,9726,3431],{"class":3339},[3296,9728,5617],{"class":3306},[3296,9730,3541],{"class":3513},[3296,9732,5617],{"class":3306},[3296,9734,9735],{"class":3339},", start);\n",[3296,9737,9738],{"class":3298,"line":5112},[3296,9739,5370],{"class":3339},[3296,9741,9742,9745,9747,9749,9751,9753,9755,9757],{"class":3298,"line":5517},[3296,9743,9744],{"class":3421},"    lines",[3296,9746,3425],{"class":3339},[3296,9748,5873],{"class":3354},[3296,9750,3431],{"class":3339},[3296,9752,6034],{"class":3421},[3296,9754,3425],{"class":3339},[3296,9756,4556],{"class":3354},[3296,9758,6347],{"class":3339},[3296,9760,9761,9763],{"class":3298,"line":5551},[3296,9762,3604],{"class":3302},[3296,9764,9765],{"class":3339}," lines;\n",[3296,9767,9768],{"class":3298,"line":5585},[3296,9769,3616],{"class":3339},[3296,9771,9772],{"class":3298,"line":5590},[3296,9773,3322],{"emptyLinePlaceholder":3321},[3296,9775,9776,9778,9780,9783,9785,9788,9790,9792,9794,9796,9798],{"class":3298,"line":5599},[3296,9777,5770],{"class":3335},[3296,9779,5773],{"class":3339},[3296,9781,9782],{"class":3335},"ConfigEntry",[3296,9784,5778],{"class":3339},[3296,9786,9787],{"class":3354},"parseEnv",[3296,9789,3431],{"class":3339},[3296,9791,5786],{"class":3331},[3296,9793,5789],{"class":3335},[3296,9795,5792],{"class":3331},[3296,9797,9635],{"class":3421},[3296,9799,5809],{"class":3339},[3296,9801,9802],{"class":3298,"line":7655},[3296,9803,3364],{"class":3339},[3296,9805,9806],{"class":3298,"line":7660},[3296,9807,9808],{"class":3339},"    vector\u003CConfigEntry> result;\n",[3296,9810,9811],{"class":3298,"line":7683},[3296,9812,3322],{"emptyLinePlaceholder":3321},[3296,9814,9815,9817,9819,9821,9824,9826],{"class":3298,"line":7707},[3296,9816,6004],{"class":3302},[3296,9818,6007],{"class":3339},[3296,9820,5786],{"class":3331},[3296,9822,9823],{"class":3339}," string& rawLine : ",[3296,9825,9624],{"class":3354},[3296,9827,9828],{"class":3339},"(text))\n",[3296,9830,9831],{"class":3298,"line":7712},[3296,9832,5352],{"class":3339},[3296,9834,9835,9838,9840],{"class":3298,"line":7738},[3296,9836,9837],{"class":3339},"        string line = ",[3296,9839,6569],{"class":3354},[3296,9841,9842],{"class":3339},"(rawLine);\n",[3296,9844,9845],{"class":3298,"line":7743},[3296,9846,3322],{"emptyLinePlaceholder":3321},[3296,9848,9849,9851,9853,9855,9857,9859,9861,9863,9865,9867,9869,9871],{"class":3298,"line":7748},[3296,9850,7572],{"class":3302},[3296,9852,6007],{"class":3339},[3296,9854,3298],{"class":3421},[3296,9856,3425],{"class":3339},[3296,9858,7582],{"class":3354},[3296,9860,7585],{"class":3339},[3296,9862,3298],{"class":3421},[3296,9864,7590],{"class":3339},[3296,9866,4401],{"class":3607},[3296,9868,7595],{"class":3339},[3296,9870,7598],{"class":3306},[3296,9872,5809],{"class":3339},[3296,9874,9875,9877,9879],{"class":3298,"line":7757},[3296,9876,7605],{"class":3302},[3296,9878,3546],{"class":3339},[3296,9880,9881],{"class":3408}," \u002F\u002F порожній рядок або коментар\n",[3296,9883,9884],{"class":3298,"line":9313},[3296,9885,3322],{"emptyLinePlaceholder":3321},[3296,9887,9888,9890,9892,9894,9896,9898,9900,9902],{"class":3298,"line":9332},[3296,9889,7616],{"class":3331},[3296,9891,7619],{"class":3339},[3296,9893,3298],{"class":3421},[3296,9895,3425],{"class":3339},[3296,9897,3428],{"class":3354},[3296,9899,3431],{"class":3339},[3296,9901,7630],{"class":3306},[3296,9903,3478],{"class":3339},[3296,9905,9906,9908,9910,9912,9915,9917],{"class":3298,"line":9337},[3296,9907,7572],{"class":3302},[3296,9909,7639],{"class":3339},[3296,9911,3440],{"class":3335},[3296,9913,9914],{"class":3339},"::npos || eq == ",[3296,9916,4401],{"class":3607},[3296,9918,5809],{"class":3339},[3296,9920,9921,9923,9925],{"class":3298,"line":9346},[3296,9922,7605],{"class":3302},[3296,9924,3546],{"class":3339},[3296,9926,9927],{"class":3408}," \u002F\u002F немає '=' або ключ порожній\n",[3296,9929,9931],{"class":3298,"line":9930},50,[3296,9932,3322],{"emptyLinePlaceholder":3321},[3296,9934,9936],{"class":3298,"line":9935},51,[3296,9937,9938],{"class":3339},"        ConfigEntry entry;\n",[3296,9940,9942,9945,9947,9950,9953,9955,9957,9959,9961,9963,9965,9967],{"class":3298,"line":9941},52,[3296,9943,9944],{"class":3421},"        entry",[3296,9946,3425],{"class":3339},[3296,9948,9949],{"class":3421},"key",[3296,9951,9952],{"class":3339},"   = ",[3296,9954,6569],{"class":3354},[3296,9956,3431],{"class":3339},[3296,9958,3298],{"class":3421},[3296,9960,3425],{"class":3339},[3296,9962,4556],{"class":3354},[3296,9964,3431],{"class":3339},[3296,9966,4401],{"class":3607},[3296,9968,7680],{"class":3339},[3296,9970,9972,9974,9976,9979,9982,9984,9986,9988,9990,9992,9994,9996],{"class":3298,"line":9971},53,[3296,9973,9944],{"class":3421},[3296,9975,3425],{"class":3339},[3296,9977,9978],{"class":3421},"value",[3296,9980,9981],{"class":3339}," = ",[3296,9983,6569],{"class":3354},[3296,9985,3431],{"class":3339},[3296,9987,3298],{"class":3421},[3296,9989,3425],{"class":3339},[3296,9991,4556],{"class":3354},[3296,9993,7699],{"class":3339},[3296,9995,3732],{"class":3607},[3296,9997,7704],{"class":3339},[3296,9999,10001],{"class":3298,"line":10000},54,[3296,10002,3322],{"emptyLinePlaceholder":3321},[3296,10004,10006],{"class":3298,"line":10005},55,[3296,10007,10008],{"class":3408},"        \u002F\u002F Прибрати лапки зі значення: \"value\" → value\n",[3296,10010,10012,10014,10016,10019,10021,10023,10025,10027,10030],{"class":3298,"line":10011},56,[3296,10013,7572],{"class":3302},[3296,10015,6007],{"class":3339},[3296,10017,10018],{"class":3421},"entry",[3296,10020,3425],{"class":3339},[3296,10022,9978],{"class":3421},[3296,10024,3425],{"class":3339},[3296,10026,5889],{"class":3354},[3296,10028,10029],{"class":3339},"() >= ",[3296,10031,10032],{"class":3607},"2\n",[3296,10034,10036,10039,10041,10043,10045,10047,10050,10053],{"class":3298,"line":10035},57,[3296,10037,10038],{"class":3339},"            && ",[3296,10040,10018],{"class":3421},[3296,10042,3425],{"class":3339},[3296,10044,9978],{"class":3421},[3296,10046,3425],{"class":3339},[3296,10048,10049],{"class":3354},"front",[3296,10051,10052],{"class":3339},"() == ",[3296,10054,10055],{"class":3306},"'\"'\n",[3296,10057,10059,10061,10063,10065,10067,10069,10072,10075,10078],{"class":3298,"line":10058},58,[3296,10060,10038],{"class":3339},[3296,10062,10018],{"class":3421},[3296,10064,3425],{"class":3339},[3296,10066,9978],{"class":3421},[3296,10068,3425],{"class":3339},[3296,10070,10071],{"class":3354},"back",[3296,10073,10074],{"class":3339},"()  == ",[3296,10076,10077],{"class":3306},"'\"'",[3296,10079,5809],{"class":3339},[3296,10081,10083],{"class":3298,"line":10082},59,[3296,10084,10085],{"class":3339},"        {\n",[3296,10087,10089,10092,10094,10096,10098,10100,10102,10104,10106,10108,10110,10112,10114,10116,10118,10120,10122,10124,10127,10129],{"class":3298,"line":10088},60,[3296,10090,10091],{"class":3421},"            entry",[3296,10093,3425],{"class":3339},[3296,10095,9978],{"class":3421},[3296,10097,9981],{"class":3339},[3296,10099,10018],{"class":3421},[3296,10101,3425],{"class":3339},[3296,10103,9978],{"class":3421},[3296,10105,3425],{"class":3339},[3296,10107,4556],{"class":3354},[3296,10109,3431],{"class":3339},[3296,10111,3732],{"class":3607},[3296,10113,4265],{"class":3339},[3296,10115,10018],{"class":3421},[3296,10117,3425],{"class":3339},[3296,10119,9978],{"class":3421},[3296,10121,3425],{"class":3339},[3296,10123,5889],{"class":3354},[3296,10125,10126],{"class":3339},"() - ",[3296,10128,3662],{"class":3607},[3296,10130,3478],{"class":3339},[3296,10132,10134],{"class":3298,"line":10133},61,[3296,10135,10136],{"class":3339},"        }\n",[3296,10138,10140],{"class":3298,"line":10139},62,[3296,10141,3322],{"emptyLinePlaceholder":3321},[3296,10143,10145,10148,10150,10152],{"class":3298,"line":10144},63,[3296,10146,10147],{"class":3421},"        result",[3296,10149,3425],{"class":3339},[3296,10151,5873],{"class":3354},[3296,10153,10154],{"class":3339},"(entry);\n",[3296,10156,10158],{"class":3298,"line":10157},64,[3296,10159,5370],{"class":3339},[3296,10161,10163],{"class":3298,"line":10162},65,[3296,10164,3322],{"emptyLinePlaceholder":3321},[3296,10166,10168,10170],{"class":3298,"line":10167},66,[3296,10169,3604],{"class":3302},[3296,10171,10172],{"class":3339}," result;\n",[3296,10174,10176],{"class":3298,"line":10175},67,[3296,10177,3616],{"class":3339},[3296,10179,10181],{"class":3298,"line":10180},68,[3296,10182,3322],{"emptyLinePlaceholder":3321},[3296,10184,10186,10188,10190],{"class":3298,"line":10185},69,[3296,10187,3351],{"class":3331},[3296,10189,3355],{"class":3354},[3296,10191,3358],{"class":3339},[3296,10193,10195],{"class":3298,"line":10194},70,[3296,10196,3364],{"class":3339},[3296,10198,10200,10202],{"class":3298,"line":10199},71,[3296,10201,6634],{"class":3331},[3296,10203,10204],{"class":3339}," string envText =\n",[3296,10206,10208,10211,10213],{"class":3298,"line":10207},72,[3296,10209,10210],{"class":3306},"        \"# Database settings",[3296,10212,3541],{"class":3513},[3296,10214,10215],{"class":3306},"\"\n",[3296,10217,10219,10222,10224],{"class":3298,"line":10218},73,[3296,10220,10221],{"class":3306},"        \"DB_HOST = localhost",[3296,10223,3541],{"class":3513},[3296,10225,10215],{"class":3306},[3296,10227,10229,10232,10234],{"class":3298,"line":10228},74,[3296,10230,10231],{"class":3306},"        \"DB_PORT = 5432",[3296,10233,3541],{"class":3513},[3296,10235,10215],{"class":3306},[3296,10237,10239,10242,10244,10247,10249],{"class":3298,"line":10238},75,[3296,10240,10241],{"class":3306},"        \"DB_NAME = ",[3296,10243,3910],{"class":3513},[3296,10245,10246],{"class":3306},"myapp_db",[3296,10248,6052],{"class":3513},[3296,10250,10215],{"class":3306},[3296,10252,10254,10257,10259],{"class":3298,"line":10253},76,[3296,10255,10256],{"class":3306},"        \"",[3296,10258,3541],{"class":3513},[3296,10260,10215],{"class":3306},[3296,10262,10264,10267,10269],{"class":3298,"line":10263},77,[3296,10265,10266],{"class":3306},"        \"# App settings",[3296,10268,3541],{"class":3513},[3296,10270,10215],{"class":3306},[3296,10272,10274,10277,10279],{"class":3298,"line":10273},78,[3296,10275,10276],{"class":3306},"        \"APP_DEBUG = true",[3296,10278,3541],{"class":3513},[3296,10280,10215],{"class":3306},[3296,10282,10284,10287,10289,10292,10294,10297,10299],{"class":3298,"line":10283},79,[3296,10285,10286],{"class":3306},"        \"  APP_SECRET = ",[3296,10288,3910],{"class":3513},[3296,10290,10291],{"class":3306},"s3cr3t_key",[3296,10293,3910],{"class":3513},[3296,10295,10296],{"class":3513},"  \\n",[3296,10298,3517],{"class":3306},[3296,10300,3340],{"class":3339},[3296,10302,10304],{"class":3298,"line":10303},80,[3296,10305,3322],{"emptyLinePlaceholder":3321},[3296,10307,10309,10311,10314,10316],{"class":3298,"line":10308},81,[3296,10310,7921],{"class":3331},[3296,10312,10313],{"class":3339}," config = ",[3296,10315,9787],{"class":3354},[3296,10317,10318],{"class":3339},"(envText);\n",[3296,10320,10322],{"class":3298,"line":10321},82,[3296,10323,3322],{"emptyLinePlaceholder":3321},[3296,10325,10327,10329,10331,10333,10335],{"class":3298,"line":10326},83,[3296,10328,6004],{"class":3302},[3296,10330,6007],{"class":3339},[3296,10332,5786],{"class":3331},[3296,10334,9226],{"class":3331},[3296,10336,10337],{"class":3339},"& entry : config)\n",[3296,10339,10341,10343,10345,10347,10349,10351,10354,10356,10358,10360,10362,10364,10366,10368,10370],{"class":3298,"line":10340},84,[3296,10342,3905],{"class":3339},[3296,10344,10018],{"class":3421},[3296,10346,3425],{"class":3339},[3296,10348,9949],{"class":3421},[3296,10350,3870],{"class":3339},[3296,10352,10353],{"class":3306},"\" => \"",[3296,10355,3870],{"class":3339},[3296,10357,10018],{"class":3421},[3296,10359,3425],{"class":3339},[3296,10361,9978],{"class":3421},[3296,10363,3870],{"class":3339},[3296,10365,3517],{"class":3306},[3296,10367,3541],{"class":3513},[3296,10369,3517],{"class":3306},[3296,10371,3340],{"class":3339},[3296,10373,10375],{"class":3298,"line":10374},85,[3296,10376,3322],{"emptyLinePlaceholder":3321},[3296,10378,10380,10382,10384],{"class":3298,"line":10379},86,[3296,10381,3604],{"class":3302},[3296,10383,3608],{"class":3607},[3296,10385,3340],{"class":3339},[3296,10387,10389],{"class":3298,"line":10388},87,[3296,10390,3616],{"class":3339},[3618,10392,10394,10404,10415,10425,10435,10445,10455],{"title":10393},".\u002FConfigParser",[3622,10395,10397,3630,10400],{"className":10396},[3298],[3296,10398,3629],{"className":10399},[3628],[3632,10401,10403],{"className":10402},[3635],".\u002FTask3",[3622,10405,10407,10411,10412],{"className":10406},[3298],[3296,10408,10410],{"className":10409},[3653],"DB_HOST"," => ",[3296,10413,7783],{"className":10414},[3644,3635],[3622,10416,10418,10411,10422],{"className":10417},[3298],[3296,10419,10421],{"className":10420},[3653],"DB_PORT",[3296,10423,7795],{"className":10424},[3644,3635],[3622,10426,10428,10411,10432],{"className":10427},[3298],[3296,10429,10431],{"className":10430},[3653],"DB_NAME",[3296,10433,10246],{"className":10434},[3644,3635],[3622,10436,10438,10411,10442],{"className":10437},[3298],[3296,10439,10441],{"className":10440},[3653],"APP_DEBUG",[3296,10443,3645],{"className":10444},[3644,3635],[3622,10446,10448,10411,10452],{"className":10447},[3298],[3296,10449,10451],{"className":10450},[3653],"APP_SECRET",[3296,10453,10291],{"className":10454},[3644,3635],[3622,10456,3666,10458,3425],{"className":10457},[3298],[3296,10459,3670],{"className":10460},[3644,3635],[3678,10462],{},[3276,10464,10466],{"id":10465},"резюме","Резюме",[10468,10469,10470,10489,10503,10520,10531,10564],"card-group",{},[10471,10472,10474,10475,10477,10478,10481,10482,4028,10484,4032,10486,10488],"card",{"icon":10473,"title":3685},"i-lucide-search-x","Спеціальна константа ",[3272,10476,3748],{}," — сигнал «не знайдено». Усі методи пошуку повертають її при невдачі. Перевірка: ",[3272,10479,10480],{},"pos != std::string::npos",". Не порівнюйте з ",[3272,10483,3744],{},[3272,10485,4401],{},[3272,10487,3702],{}," беззнаковий.",[10471,10490,10492,10495,10496,10499,10500,10502],{"icon":2731,"title":10491},"find та rfind",[3272,10493,10494],{},"find(what, pos)"," — перше входження зліва направо. ",[3272,10497,10498],{},"rfind(what, pos)"," — останнє (справа наліво). Обидва приймають підрядок або символ. ",[3272,10501,5660],{}," дозволяє продовжити пошук з довільного місця.",[10471,10504,10507,10508,10511,10512,10515,10516,10519],{"icon":10505,"title":10506},"i-lucide-filter","find_first\u002Flast_of","Шукають перший (або останній) символ із ",[3632,10509,10510],{},"набору"," символів. ",[3272,10513,10514],{},"find_first_of(\".,;!\")"," — перший знак пунктуації. ",[3272,10517,10518],{},"find_last_of(\"\u002F\\\\\")"," — остання косая риска в шляху.",[10471,10521,10524,10525,10527,10528,10530],{"icon":10522,"title":10523},"i-lucide-filter-x","find_first\u002Flast_not_of","Шукають перший (або останній) символ, що ",[3632,10526,5219],{}," до набору. Основне застосування: ",[3272,10529,6569],{}," (видалення пробілів з країв), валідація (чи рядок містить лише дозволені символи).",[10471,10532,10533,10535,10536,10539,10540,4032,10542,10544,10545,10547,10548,4032,10550,10544,10552,10544,10554,10539,10556,4032,10558,10561,10562,3425],{"icon":2740,"title":5712},[3632,10534,5781],{}," — цикл ",[3272,10537,10538],{},"find(..., pos + sub.len())",". ",[3632,10541,6140],{},[3272,10543,3428],{}," + ",[3272,10546,4556],{}," у циклі. ",[3632,10549,6569],{},[3272,10551,3505],{},[3272,10553,5208],{},[3272,10555,4556],{},[3632,10557,6918],{},[3272,10559,10560],{},"find != npos","; у C++23: ",[3272,10563,6937],{},[10471,10565,10567,10568,10571,10572,10575,10576,10579],{"icon":943,"title":10566},"STL алгоритми","Для пошуку за предикатом — ",[3272,10569,10570],{},"std::find_if",". Для підрахунку — ",[3272,10573,10574],{},"std::count",". Для пошуку підрядка через ітератори — ",[3272,10577,10578],{},"std::search",". Методи рядка зручніші для підрядків; алгоритми — коли потрібна гнучкість предиката.",[3281,10581,10582,10585,10586,10591],{},[3632,10583,10584],{},"Що далі?"," Наступна стаття — ",[3632,10587,10588],{},[3272,10589,10590],{},"std::string_view"," (C++17): легковагий «погляд» на рядок без копіювання, його переваги при передачі в функції, а також важливі обмеження та правила безпечного використання.",[10593,10594,10595],"style",{},"html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sjcCO, html code.shiki .sjcCO{--shiki-light:#EE0000;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":3292,"searchDepth":3310,"depth":3310,"links":10597},[10598,10599,10601,10608,10610,10612,10613,10624,10626,10632],{"id":3278,"depth":3310,"text":3279},{"id":3682,"depth":3310,"text":10600},"std::string::npos — «не знайдено»",{"id":4046,"depth":3310,"text":10602,"children":10603},"Методи find та rfind",[10604,10606],{"id":4057,"depth":3318,"text":10605},".find() — пошук першого входження",{"id":4429,"depth":3318,"text":10607},".rfind() — пошук останнього входження",{"id":4781,"depth":3310,"text":10609},"Пошук за набором символів: find_first_of та find_last_of",{"id":5202,"depth":3310,"text":10611},"Пошук за виключенням: find_first_not_of та find_last_not_of",{"id":5648,"depth":3310,"text":5649},{"id":5711,"depth":3310,"text":5712,"children":10614},[10615,10616,10618,10620,10622],{"id":5715,"depth":3318,"text":5716},{"id":6136,"depth":3318,"text":10617},"Розбиття рядка: split",{"id":6566,"depth":3318,"text":10619},"trim — видалення пробілів з країв",{"id":6915,"depth":3318,"text":10621},"contains та starts_with \u002F ends_with",{"id":7305,"depth":3318,"text":10623},"Парсинг формату key = value",{"id":7827,"depth":3310,"text":10625},"Методи std::string vs алгоритми \u003Calgorithm>",{"id":8452,"depth":3310,"text":8453,"children":10627},[10628,10629,10631],{"id":8456,"depth":3318,"text":8457},{"id":8895,"depth":3318,"text":10630},"Рівень 2 — Функція split із рядком-роздільником",{"id":9409,"depth":3318,"text":9410},{"id":10465,"depth":3310,"text":10466},"Методи пошуку в std::string: find(), rfind(), find_first_of(), find_last_of(), find_first_not_of(), find_last_not_of(). Поняття std::string::npos. Практичні патерни: знайти всі входження, split, trim, парсинг key=value.","md",null,{},{"title":1885,"description":10633},"ZCX0TpcjpOCNPq_pHmK4zhGbY949MEcqHPRNv1W7iwE",[10640,10642],{"title":1881,"path":1882,"stem":1883,"description":10641,"children":-1},"Методи зміни вмісту рядка: assign(), append(), push_back(), insert(), erase(), replace(), resize(). Витяг підрядка через substr(). Порівняння рядків: оператори та метод compare().",{"title":1889,"path":1890,"stem":1891,"description":10643,"children":-1},"Клас std::string_view (C++17): внутрішня модель {ptr, length}, створення з const char* та std::string, методи read-only доступу, remove_prefix\u002Fremove_suffix, відсутність нуль-термінатора. Dangling view — найнебезпечніша пастка. Коли обирати string_view, а коли const std::string&.",1780940935182]