ru	Декларации в БЭМ
uk	Декларації в БЕМ

ru	Чтобы перечислить БЭМ-сущности, необходимые для построения веб-страницы (читай «частного случая бандла../build/build.ru.md#bundle»), можно воспользоваться декларацией.
uk	Щоб перерахувати БЕМ-суті, необхідні для побудови веб-сторінки (читай «приватного випадку [бандла](../build/build.ru.md#bundle)»), можна скористатися **декларацією**.

ru	Декларация представляет собой список блоков../key-concepts/key-concepts.ru.md#Блок, элементов../key-concepts/key-concepts.ru.md#Элемент и модификаторов../key-concepts/key-concepts.ru.md#Модификатор, которые используются на странице.
uk	Декларація являє собою список [блоків](../key-concepts/key-concepts.ru.md#Блок), [елементів](../key-concepts/key-concepts.ru.md#Елемент) і [модифікаторів](../key-concepts/key-concepts.ru.md#Модифікатор), які використовуються на сторінці.

ru	Таким образом, инструмент сборки, основываясь на данных из декларации, ограничивает количество сущностей, попадающих в готовый проект.
uk	Таким чином, інструмент збірки, грунтуючись на даних з декларації, обмежує кількість сутностей, що потрапляють в готовий проект.

ru	Нет необходимости подключать все блоки проекта, если можно собрать только нужные по списку.
uk	Немає необхідності підключати всі блоки проекту, якщо можна зібрати тільки потрібні за списком.

ru	Задача декларации — определить, что и в каком порядке подключать в сборку.
uk	**Завдання декларації** — визначити, що і в якому порядку підключати в збірку.

ru	В БЭМ-платформе описание страницы создается в формате BEMJSON, а декларация страницы описывается в формате BEMDECL, например:
uk	У БЕМ-платформі опис сторінки створюється у форматі BEMJSON, а декларація сторінки описується в форматі BEMDECL, наприклад:

ru	Способы получения декларации
uk	Способи одержання декларації

ru	Декларация может формироваться вручную.
uk	Декларація може формуватися вручну.

ru	Для этого нужно перечислить БЭМ-сущности, участвующие в построении страницы.
uk	Для цього потрібно перерахувати БЕМ-сутності, що беруть участь в побудові сторінки.

ru	Автоматическое построение декларации возможно:
uk	Автоматична побудова декларації можливо:

ru	по описанию страницы#Создание-декларации-по-описанию-страницы
uk	[по опису сторінки](#Створення декларації-опису сторінки)

ru	с помощью интроспекции файловой системы#Создание-декларации-с-помощью-интроспекции-файловой-системы
uk	[з допомогою інтроспекції файлової системи](#Створення декларації з допомогою інтроспекції-файлової системи)

ru	Создание декларации по описанию страницы
uk	Створення декларації за описом сторінки

ru	Список необходимых для сборки сущностей можно получить по классам из HTML-файла веб-страницы.
uk	Список необхідних для складання сутностей можна отримати за класами з HTML-файлу веб-сторінки.

ru	В БЭМ-проекте структура веб-страницы описывается с помощью БЭМ-дерева../key-concepts/key-concepts.ru.md#БЭМ-дерево.
uk	У БЕМ-проекті структура веб-сторінки описується з допомогою [БЕМ-дерева](../key-concepts/key-concepts.ru.md#БЕМ-дерево).

ru	HTML-код страницы содержит классы с именами всех используемых блоков, элементов и модификаторов.
uk	HTML-код сторінки містить класи з іменами всіх використовуваних блоків, елементів і модифікаторів.

ru	БЭМ-дерево может быть построено автоматически по классам из HTML или создано вручную.
uk	БЕМ-дерево може бути побудовано автоматично по класах з HTML або створено вручну.

ru	При сборке страницы декларация формируется автоматически на основании данных из БЭМ-дерева:
uk	При складанні сторінки декларація формується автоматично на підставі даних з БЕМ-дерева:

ru	Все сущности (блоки, элементы и модификаторы) попадают в декларацию в порядке, указанном в конфигурации сборки.
uk	Всі сутності (блоки, елементи і модифікатори) потрапляють до декларації у порядку, зазначеному в конфігурації збірки.

ru	Если на странице используется одна и та же сущность дважды, в декларацию она попадет только один раз.
uk	Якщо на сторінці використовується одна і та ж сутність двічі, в декларацію вона потрапить тільки один раз.

ru	Вложенность блоков и элементов в декларации не отображается.
uk	Вкладеність блоків і елементів в декларації не відображаються.

ru	Один из инструментов, позволяющих получить БЭМ-дерево по HTML-структуре страницы, — html2bemjsonhttps://github.com/bem-incubator/html2bemjson.
uk	Один з інструментів, що дозволяють отримати БЕМ-дерево з HTML-структурі сторінки, — [html2bemjson](https://github.com/bem-incubator/html2bemjson).

ru	Способ создания декларацииdeclarations__html2decl.png
uk	![Спосіб створення декларації](declarations__html2decl.png)

ru	Пример проекта, в котором формируется отдельная декларация для каждой страницы, — Создаем свой проект на БЭМhttps://ru.bem.info/tutorials/start-with-project-stub/.
uk	Приклад проекту, в якому формується окрема декларація для кожної сторінки, — [Створюємо свій проект на БЕМ](https://ru.bem.info/tutorials/start-with-project-stub/).

ru	Создание декларации с помощью интроспекции файловой системы
uk	Створення декларації з допомогою інтроспекції файлової системи

ru	Другой источник, откуда можно собрать данные о сущностях — файловая система проекта.
uk	Інше джерело, звідки можна зібрати дані про сутності — файлова система проекту.

ru	Такой способ построения декларации автоматически включает все сущности, находящиеся в файловой системе проекта.
uk	Такий спосіб побудови декларації автоматично включає всі сутності, що знаходяться у файловій системі проекту.

ru	Это обеспечивает стопроцентное попадание в сборку всех необходимых сущностей, но не предоставляет точности: в сборку попадут все имеющиеся сущности, а не только нужные.
uk	Це забезпечує стовідсоткове потрапляння в збірку всіх необхідних сутностей, але не надає точності: в збірку потраплять всі наявні сутності, а не лише потрібні.

ru	Декларация, созданная по описанию страницы, наоборот, обеспечивает точечную сборку нужных БЭМ-сущностей, но не может гарантировать подключение всех сущностей, явно не описанных в HTML-файле страницы.
uk	Декларація, створена за описом сторінки, навпаки, забезпечує точкову збирання потрібних БЕМ-сутностей, але не може гарантувати підключення всіх сутностей, явно не описаних у файлі HTML сторінки.

ru	Способ создания декларацииdeclarations__fs2decl.png
uk	![Спосіб створення декларації](declarations__fs2decl.png)

ru	В bem-componentshttps://ru.bem.info/libs/bem-components/ создание декларации с помощью интроспекции файловой системы используется для поставки библиотеки в виде Disthttps://ru.bem.info/libs/bem-components/current/#Варианты-поставки-библиотеки.
uk	В [bem-components](https://ru.bem.info/libs/bem-components/) створення декларації з допомогою інтроспекції файлової системи використовується для поставки бібліотеки у вигляді [Dist](https://ru.bem.info/libs/bem-components/current/#Варианты-поставки-библиотеки).

ru	Алгебра деклараций
uk	Алгебра декларацій

ru	С помощью деклараций можно управлять процессом сборки.
uk	З допомогою декларацій можна керувати процесом збірки.

ru	Например, можно объединять декларации разных страниц в одну и собирать весь проект целиком, а не постранично.
uk	Наприклад, можна об'єднувати декларації різних сторінок в одну і збирати весь проект цілком, а не посторінково.

ru	Декларации можно не только совмещать, но и повторно использовать, выделять общие части или различия.
uk	Декларації можна не тільки поєднувати, але і повторно використовувати, виділяти загальні частини або відмінності.

ru	Такое управление дает возможность собирать все страницы в один бандл../build/build.ru.md#bundle, догружать необходимые части страницы по требованию или повторно использовать уже собранные общие компоненты на разных страницах.
uk	Таке управління дає можливість збирати всі сторінки в один [бандл](../build/build.ru.md#bundle), довантажувати необхідні частині сторінки на вимогу або повторно використовувати вже зібрані загальні компоненти на різних сторінках.

ru	Операции над декларациями
uk	Операції над деклараціями

ru	сложение#Объединение-нескольких-деклараций-в-одну — объединение множеств сущностей разных деклараций в одну;
uk	[додати](#Об'єднання кількох-декларацій-в-одну) — об'єднання множин сутностей різних декларацій в одну;

ru	вычитание#Получение-разницы-между-декларациями — получение разницы между множествами сущностей разных деклараций;
uk	[віднімання](#Одержання різниці між-деклараціями) — одержання різниці між множинами сутностей різних декларацій;

ru	пересечение#Получение-декларации-на-основе-пересечения-нескольких-других — получение декларации на основании пересечения множеств сущностей двух других деклараций.
uk	[перетин](#Одержання декларації-на-основі-перетину кількох інших) — отримання декларації на підставі перетину множин сутностей двох інших декларацій.

ru	Сложение деклараций
uk	Складання декларацій

ru	Применяется для создания общих файлов технологий (например, общего CSS- и JavaScript-файла) для нескольких страниц.
uk	Застосовується для створення загальних файлів технологій (наприклад, загального CSS і JavaScript-файл) для декількох сторінок.

ru	Используется, если необходимо загрузить все страницы одновременно и не тратить время на загрузку каждой отдельной страницы при переходе между ними.
uk	Використовується, якщо необхідно завантажити всі сторінки одночасно і не витрачати час на завантаження кожної окремої сторінки при переході між ними.

ru	Декларация 1 Декларация 2 Декларация 3 [ [ [ 'header', 'header', 'header', 'input', 'input', 'input', 'button', 'button', 'button', 'link', 'link', 'attach', + = 'attach', 'menu', 'menu', 'image', 'image', 'checkbox', 'checkbox', 'popup' 'popup', 'textarea' 'textarea' ] ] ]
uk	Декларація 1 Декларація 2 Декларація 3 [ [ [ 'header', 'header', 'header', 'input', 'input', 'input', 'button', 'button', 'button', 'link', 'link', 'attach', + = 'attach', 'menu', 'menu', 'image', 'image', 'checkbox', 'checkbox', 'popup' 'popup', 'textarea' 'textarea' ] ] ]

ru	Вычитание деклараций
uk	Віднімання декларацій

ru	Один из способов применения — сборка части страницы, которая догружается по требованию (например, в ответ на действие пользователя).
uk	Один із способів застосування — збірка частині сторінки, яка догружается на вимогу (наприклад, у відповідь на дію користувача).

ru	Декларация 1 Декларация 2 Декларация 3 [ [ [ 'button', 'button', 'checkbox', 'checkbox', 'textarea', 'textarea', 'suggest' 'suggest' 'header', - 'input', = 'button', 'menu', 'image', 'popup' ] ] ]
uk	Декларація 1 Декларація 2 Декларація 3 [ [ [ 'button', 'button', 'checkbox', 'checkbox', 'textarea', 'textarea', 'suggest' 'suggest' 'header', - 'input', = 'button', 'menu', 'image', 'popup' ] ] ]

ru	Например, на странице используется виртуальная клавиатура, которая становится доступна пользователю только в ответ на определенное действие.
uk	Наприклад, на сторінці використовується віртуальна клавіатура, яка стає доступною користувачеві тільки у відповідь на певну дію.

ru	Нет необходимости включать этот блок в сборку всей страницы, так как это увеличит время загрузки.
uk	Немає необхідності включати цей блок в збірку всієї сторінки, так як це збільшить час завантаження.

ru	Кнопки клавиатуры могут быть уже реализованы на странице для других целей.
uk	Кнопки клавіатури можуть бути реалізовані на сторінці для інших цілей.

ru	Возможность вычитать декларации позволяет создать отдельный бандл (файлы для части страницы) для недостающей реализации виртуальной клавиатуры и подключать его только по требованию.
uk	Можливість віднімати декларації дозволяє створити окремий пакет (файли для частини сторінки) для відсутньої реалізації віртуальної клавіатури і підключати його тільки на вимогу.

ru	Пересечение деклараций
uk	Перетин декларацій

ru	Применяется для создания декларации, описывающей общие части разных страниц проекта.
uk	Застосовується для створення декларації, що описує загальні частини різних сторінок проекту.

ru	Это позволяет собрать общую часть для всех страниц и подключать ее при сборке один раз ко всем страницам.
uk	Це дозволяє зібрати загальну частину для всіх сторінок і підключати її при складанні один раз до всіх сторінок.

ru	Декларация 1 Декларация 2 Декларация 3 [ [ [ 'header', 'header', 'header', 'input', 'menu', 'link', ⋂ 'button', = 'attach', 'input', 'checkbox', 'image', 'textarea', 'popup', 'footer' 'footer' 'footer' ] ] ]
uk	Декларація 1 Декларація 2 Декларація 3 [ [ [ 'header', 'header', 'header', 'input', 'menu', 'link', ⋂ 'button', = 'attach', 'input', 'checkbox', 'image', 'textarea', 'popup', 'footer' 'footer' 'footer' ] ] ]

ru	Например, такое разделение эффективно, если в проекте на всех страницах используется шапка и подвал.
uk	Наприклад, такий поділ ефективно, якщо в проекті на всіх сторінках використовується `шапка` і `підвал`.

ru	Общая часть страниц описывается в отдельной декларации.
uk	Загальна частина сторінок описується в окремій декларації.

ru	При сборке каждая страница формируется на основании двух деклараций: общей (содержащей шапку и подвал) и собственной (описывающей оставшуюся часть страницы).
uk	При складанні кожна сторінка формується на підставі двох декларацій: загальної (містить `шапка` і `підвал`) і власної (яка описує частину сторінки).