Permutations на практике

Permutations перемешивают. Enumerations выбирают. Настоящая вариативность в хорошо написанном шаблоне живёт в permutations — а не в стопках синонимов. В этом гайде: синтаксис, правила сепараторов и один паттерн, который упускает большинство авторов — серийные списки в заголовках и мета-описаниях.

Простая permutation

[a|b|c]

Значения по умолчанию:

  • включаются все элементы;
  • порядок перемешивается при каждом рендере;
  • сепаратор — один пробел.

Примеры вывода: a b c, c a b, b c a.

Короткая форма с одним сепаратором

Задать seplastsep) одним движением:

[< и >a|b|c]

Возможные исходы: a и b и c, c и a и b. Короткая форма присваивает одну и ту же строку и sep, и lastsep — все склейки выглядят одинаково.

Полная конфигурация

Развёрнутая форма даёт полный контроль:

[<minsize=2;maxsize=4;sep=", ";lastsep=" и ">a|b|c|d|e]

Правила:

  • minsize — минимальное число выбираемых элементов;
  • maxsize — максимальное число элементов;
  • sep — склеивает все элементы, кроме последней пары;
  • lastsep — склеивает последние два элемента (для естественного «A, B и C»).

Пропустите одно — второе подставится разумно:

  • задан только minsizemaxsize равен «всем доступным»;
  • задан только maxsizeminsize равен 1;
  • оба больше количества элементов → урезается до общего числа;
  • движок не может выбрать ноль элементов. Для «возможно, никакого списка» — обёртка с пустой веткой (см. ниже).

Сепараторы для отдельных элементов

Если нужен контроль тоньше, чем глобальные sep/lastsep, — один элемент может нести свой собственный сепаратор:

[<, >Visa|Mastercard < и >|Skrill]

Здесь:

  • глобальный сепаратор — ", ";
  • элемент после Mastercard несёт свой локальный сепаратор " и ".

Переопределения на уровне элемента редки, но полезны, когда конкретному слоту нужен другой союз.

Автоматическое разделение пробелами

Обычные словесные сепараторы автоматически дополняются пробелами с двух сторон:

[<и>a|b|c]

ведёт себя как:

a и b и c

Пунктуационные сепараторы пробелами не дополняются:

[<,>a|b|c]

даёт:

a,b,c

Нужен пробел после запятой — включите его явно: [<, >a|b|c].

Необязательные списки

Поскольку permutation не может выдать ноль элементов, сделать список «возможно, отсутствующим» можно только обёрткой всей permutation в перечисление с пустой веткой:

{|[<minsize=2;maxsize=3;sep=", ";lastsep=" и ">Postgres|Redis|Kafka|MongoDB]}

Возможные исходы: Postgres и Redis, Kafka, Postgres и Redis или пустая строка. Не забудьте про пробелы вокруг — когда список может исчезнуть, пробел нужно класть внутрь ветки.

Серийные списки в заголовках и мета-описаниях

Это тот паттерн, который упускает большинство авторов. Заголовки и H2/H3 часто обещают несколько параллельных тем:

Преимущества, интеграции и как начать

Это не замороженная строка — это список из трёх параллельных блоков. Узнавайте паттерн и авторите как permutation:

[<minsize=3;maxsize=3;sep=", ";lastsep=" и ">Преимущества|Интеграции|Как начать]

Хорошо в рамке заголовка с брендом:

%product_name%: [<minsize=3;maxsize=3;sep=", ";lastsep=" и ">Преимущества|Интеграции|Как начать]

Плохо:

%product_name%: {Преимущества, интеграции и как начать|Полное руководство для команд}

Почему второй вариант слабее:

  • он относится к структурированному списку как к одной замороженной строке;
  • он теряет паттерн сепаратора, который движок и так умеет;
  • он подталкивает модель к альтернативам целых строк вместо переиспользуемой структуры;
  • он даёт единицы вариантов там, где permutation даёт десятки.

Паттерн серийных списков применяйте в:

  • заголовках, перечисляющих три и более обещания;
  • мета-описаниях, называющих несколько блоков статьи;
  • H1/H2/H3, перечисляющих параллельные темы разделов.

Не применяйте, когда последовательность — процедурная и должна оставаться в порядке:

Создайте аккаунт, подтвердите email и внесите депозит

Это шаги, а не свободно переставляемый заголовочный список.

Регистр в заголовках — вручную

Обычное правило для основного текста говорит: элементы permutation должны начинаться со строчной буквы, потому что пост-обработка капитализирует начало предложения.

К серийным заголовкам это правило не применяется. Каждый элемент нужно писать сразу в нужном регистре отображения:

[<minsize=3;maxsize=3;sep=", ";lastsep=" и ">Преимущества|Интеграции|Как начать]

а не:

[<minsize=3;maxsize=3;sep=", ";lastsep=" и ">преимущества|интеграции|как начать]

Пост-обработка не преобразует список, склеенный запятыми, в title case за вас.

Типичные ошибки с permutations

Не надоПочемуВместо этого
Хардкодить фиксированный список из 4+ элементовФиксированный порядок становится отпечатком на всех рендерах.Использовать permutation, даже с minsize=maxsize, если состав обязателен.
Замораживать серийный заголовок одной строкойТеряется паттерн сепаратора; пространство вариантов резко сужается.Выдавать как permutation с sep и lastsep.
Указывать minsize=0Движок клэмпит к 1; ожидание молча нарушено.Обернуть список в {|[...]} для «возможно, списка нет».
Заканчивать элементы точкой при sep=". "Двойная пунктуация: «факт. . следующий факт».Пусть пунктуацию добавляет сепаратор; элементы оставляйте «голыми».
Добавлять пробелы вокруг словесного сепаратора, который и так дополняетсяПолучается aиb или лишние пробелы.Доверяйте автодополнению для словесных сепараторов; пробелы ставьте только у пунктуационных.
Писать элементы в разном регистреИтоговый текст выглядит как случайная капитализация.Body-text — строчные, заголовки — title case. Внутри одной permutation — консистентно.
Делать каждый элемент целым предложением со своим подлежащимСерийный поток ломается — каждый элемент читается отдельным абзацем.Элементы на уровне фразы; подлежащее выносите за скобки permutation.

Чеклист по permutations

  • Любой список из трёх и более элементов — это permutation, а не замороженная строка.
  • Серийные списки в заголовках используют permutations с явными sep/lastsep.
  • Необязательные списки обёрнуты в {|[...]}, а не попытаны через minsize=0.
  • Элементы permutation не заканчиваются пунктуацией, которую уже добавляет сепаратор.
  • Permutations в заголовках написаны в отображаемом регистре.
  • Permutations в основном тексте начинаются со строчной, если пост-обработка капитализирует.
  • Все элементы внутри одной permutation грамматически параллельны.

Структура на месте — остаётся финальный проход по грамматике: грамматически безопасная синонимизация.


Продолжить серию