Конструкции
Генератор производит значение. Конструкция решает, что происходит вокруг этого значения: какое из них берётся, появится ли оно вообще, сколько их ляжет в ячейку, можно ли ему повторяться и во сколько строк развернётся одна карточка.
Это весь список. Шесть конструкций — всё остальное в TDC либо генератор, либо место, куда кладут текст, либо способ посчитать новое из уже полученного.
| Конструкция | На какой вопрос отвечает | |
|---|---|---|
<mix> | Какая из нескольких веток — в точных долях? | Выбор между значениями |
<switch> | Какое значение следует из другого поля? | Таблицы соответствия |
if | Появится ли этот кусок вообще? | Условия |
repeat | Сколько значений ляжет в одну ячейку? | Несколько значений в ячейке |
each | Во сколько строк развернётся одна карточка? | Строка на элемент |
uniq · <distinct> | Можно ли значению повторяться — в строке или вообще? | Уникальность |
Ещё три вещи ведут себя как конструкции, но описаны в другом месте, потому что принадлежат более крупной теме:
-
<pool>— строка ссылается на целую запись, а не на значение: тридцать врачей, и строка пациента получает одного из них целиком. Тема выросла в отдельный раздел. -
parent— значение, взятое из подмножества, которое выбрал родитель. Это часть того, как связаны последовательности, поэтому живёт в Последовательностях, а прикладная сторона — в Иерархических зависимостях. -
<compute>— получение значения вычислением, а не розыгрышем. Это отдельный маленький язык, у него свой раздел.
Четыре из них в одном конфиге
Здесь нет ничего надуманного — так конфиг и выглядит, когда работу делают конструкции. Тариф в заданных долях, цена, следующая из тарифа, переменное число меток в одной ячейке и слово, появляющееся только у платных строк:
<env count="6" seed="tour">
<mix name="Plan" percent="50,30,20">
<case><gen type="text" value="free"/></case>
<case><gen type="text" value="pro"/></case>
<case><gen type="text" value="team"/></case>
</mix>
<switch name="Price" on="Plan">
<map>free:0, pro:12, team:40</map>
</switch>
<sequence name="Tags">
<gen type="text" value="api,web,cli,db" repeat="1..3" separator=";"/>
</sequence>
<sequence name="Id"><gen type="increment" value="1"/></sequence>
</env>
<block>
<line>
<data>${{Id}} ${{Plan}} $${{Price}} [${{Tags}}]</data>
<data if="Price > 0"> paid</data>
</line>
</block>
1 free $0 [web;api] 2 free $0 [api;db;cli] 3 pro $12 [web] paid 4 free $0 [cli] 5 pro $12 [cli;api;db] paid 6 team $40 [db;web] paid
Сверьте вывод с конфигом — каждая конструкция видна: три free из шести это те самые
50 в percent; $12 никогда не оказывается рядом с free, потому что Price не
разыгрывается сам, а следует из Plan; число меток меняется от строки к строке; а
paid отсутствует ровно там, где цена ноль.
Куда дальше
Страницы этого раздела разбирают по одной конструкции, целиком. Если вы учите язык, читайте подряд — они опираются одна на другую, и примеры постепенно перестают быть игрушечными.
Когда конструкция стала привычной, Руководства покажут, что из них собирать: связные карточки, вывод в CSV и SQL, статистические формы, выбросы, пропуски и наборы, не влезающие в память.