Счётчики — increment и decrement
Когда брать. Нужен сквозной счётчик вместо случайного значения — последовательный id или номер строки (1, 2, 3…), серия артикулов, растущая с фиксированным шагом, или обратный отсчёт до нуля.
Оба генератора живут внутри <sequence>:
последовательность один раз вычисляется как массив, а каждая строка вывода берёт
следующее значение через интерполяцию
${{Имя}}.
Кратко
| Атрибут | Применяется к | По умолчанию | Что делает |
|---|---|---|---|
value | increment, decrement | 0 | Стартовое значение |
step | increment, decrement | 1 | На сколько прибавлять или вычитать каждую строку |
Оба счётчика привязаны к позиции и детерминированы: каждая строка просто
берёт следующее значение прогона. Они полностью игнорируют
seed (в отличие от случайных генераторов),
поэтому последовательность одинакова при каждом запуске — выводы на этой странице
точные, а не просто иллюстративные.
increment — возрастающий счётчик
Каждая строка — это предыдущее значение плюс step. С настройками по умолчанию
(value="0", step="1") счётчик растёт на единицу, но чаще всего нужна колонка
id, стартующая с 1.
<sequence name="Id"><gen type="increment" value="1"/></sequence>
1 2 3 4 5
Берите его всегда, когда нужен стабильный сквозной id или номер строки — каждая карточка получает свой уникальный последовательный номер, и это воспроизводимо между запусками.
decrement — убывающий счётчик
Каждая строка — это предыдущее значение минус step. Те же два атрибута,
меняется только направление.
<sequence name="Countdown"><gen type="decrement" value="100"/></sequence>
100 99 98 97 96
Берите decrement, когда нужен обратный отсчёт, колонка остатка или любая
обратная нумерация, которая стартует высоко и идёт вниз.
step — шаг
step задаёт, на сколько счётчик сдвигается между
строками. По умолчанию — 1. Направьте одинаковый старт (value="1") на два
разных шага, и единственное различие — величина шага: слева счёт идёт по одному,
справа — по пять:
<sequence name="ByOne"><gen type="increment" value="1"/></sequence>
<sequence name="ByFive"><gen type="increment" value="1" step="5"/></sequence>
...
<data>${{ByOne}} ${{ByFive}}</data>
step=1 step=5 1 1 2 6 3 11 4 16 5 21 6 26
С decrement step работает так же — он задаёт, насколько велик каждый шаг вниз:
<sequence name="Full"><gen type="decrement" value="1000"/></sequence>
<sequence name="ByHundred"><gen type="decrement" value="1000" step="100"/></sequence>
step=1 step=100 1000 1000 999 900 998 800 997 700 996 600
Задавайте свой step для серий, которые идут не по одному: артикулы с шагом 5,
цена, падающая на фиксированную величину, шкала с делениями по десять.
Дробный шаг
step (как и value) принимает вещественное число, а не только целое — удобно
для цен, процентов и любых измеряемых величин, которые меняются дробно:
<sequence name="Price"><gen type="decrement" value="9.99" step="0.50"/></sequence>
9.99 9.49 8.99 8.49 7.99
Детерминирован по своей природе
Счётчики никогда не обращаются к случайному движку, поэтому одна и та же
конфигурация даёт один и тот же прогон независимо от
seed. Два запуска с разными сидами дают
побайтово одинаковые колонки счётчиков:
<gen type="increment" value="1" step="10"/>
seed=alpha seed=omega 1 1 11 11 21 21 31 31 41 41
Именно поэтому счётчики — надёжный каркас набора данных: колонки id и номера строк остаются на месте, даже когда вы перетасовываете всё случайное вокруг них.
Нужен только номер строки?
Если всё, что нужно, — это текущий номер строки прямо в шаблоне вывода, есть
встроенный ${{_count}} — последовательность не требуется. Он
стартует с 1 и растёт на единицу с каждой записью.
Берите последовательность increment, когда счётчик нужен как именованное значение —
чтобы переиспользовать его в нескольких местах, оформить
маской, начать не с 1 или двигаться шагом, отличным
от 1.
Смотрите также
- Последовательности — контейнер, в котором живут оба счётчика.
- Встроенные значения —
_count,_first,_last,_total. - Детерминизм — почему один и тот же сид воспроизводит те же данные (и почему счётчики его игнорируют).