Шаг «Свой код»
Шаг «Свой код» — это кусок C# внутри схемы: то же, что рукописная функция GAP, но со своими данными на входах.
Две настройки шага
Section titled “Две настройки шага”| Настройка | Что это |
|---|---|
| Что подать в код | Имена через запятую. Каждое станет входом блока и переменной в коде. Пустая настройка означает блок без входов — и это законно. |
| Код | Тело на C#. Значение последнего выражения — результат шага. |
Имя входа блок подбирает сам
Section titled “Имя входа блок подбирает сам”Поставленный после шага, блок называет свой вход по тому, что по связи придёт. Это важно: общее «значение» на объектах читалось как обещание строки — из-за него объект и пытались разбирать как текст.
| Что пришло | Имя входа |
|---|---|
| один объект | obj |
| список объектов | objects |
| список текстов | values |
| число | number |
| список чисел | numbers |
| да / нет | flag |
| словарь | map |
| прочее | value |
Вместе с именем блок приходит с заготовкой кода, которая на это имя ссылается:
// последнее выражение уходит в следующий шагobjГотовая строка, которая уже работает, отвечает на вопрос «а как тут писать» сразу — её правят, а не сочиняют с нуля.
Окно кода
Section titled “Окно кода”На фигуре шага стоит кнопка «Править код» — код правят в своём окне, а не в строке фигуры.
| Элемент окна | Что делает |
|---|---|
| «Проверить» | Собирает код и говорит, что не так, — не запуская всю схему. Работает и когда проект не разобран. |
| «+ вход» | Добавляет блоку ещё одно значение на вход. |
| «Закрыть» | Просто закрывает. Наверху так и написано: «Написанное уходит в схему сразу — окно можно просто закрыть.» |
| Строка под курсором | Показывает выражение под курсором и то, чем оно является: текст, число, объект, список объектов. |
| Подсказка после точки | Считается компилятором по тому, что реально стоит слева от точки. Собственные члены типа (GetField, Name) идут выше расширений LINQ — иначе алфавит выносил наверх Aggregate и Cast. |
Панель «Что пришло»
Section titled “Панель «Что пришло»”Это первое, что нужно знать, садясь писать код, и единственное, чего на фигуре не было. Имя входа придумал сам инженер, тип задала схема выше, и по строке «значение · от предыдущего шага» нельзя было понять ни того, что пришёл объект, ни того, что у него есть сто пятьдесят колонок. Отсюда и брались попытки разбирать объект как строку.
Шапка панели
Section titled “Шапка панели”Две-три строки, отвечающие на вопрос «что за значение мне пришло»:
| Строка | Пример |
|---|---|
| Под каким именем лежит и чем является | objects — список объектов, их 973obj — объект: PT101values — текст ×N, их 4 |
| Как добраться до одного | objects.First() — первый из них: PT101 |
| Чьи это поля | поля объекта · значения — у первого, PT101поля этого объекта — из его типа |
Строки свойств
Section titled “Строки свойств”Каждая строка — свойство, его значение у показанного объекта и тип словами. Нажатие по строке вставляет в код готовое обращение к этому свойству — не имя, а именно обращение, тем же способом, каким его берут.
Галка «только заполненные» убирает пустые: у объекта полторы сотни свойств, и почти все пусты — стена прочерков не говорит о нём ничего, а девять заполненных строк говорят всё.
Под длинным списком или словарём стоит «ещё N…» — нажатие показывает остальное.
Когда список свойств не показывается
Section titled “Когда список свойств не показывается”| Строка в панели | Почему |
|---|---|
какого типа этот объект — не выведено, поэтому его полей здесь нет | Тип пришедшего неизвестен. Так бывает у кода, в который втекли объекты двух разных типов: чей объект он вернул, компилятору не видно, а угадывать — значит показать чужие поля как свои. |
что с этим можно сделать — то же, что подсказка после точки | Пришли не объекты, а строки или числа. |
Типы переменных в коде
Section titled “Типы переменных в коде”Форма на входе — это тип переменной в вашем коде, а не украшение. Тип берётся из схемы, а не из данных: схема считается по каждому объекту прогона, и код, собравшийся на первом, обязан собираться и на пустом.
| Форма на входе | Тип в коде |
|---|---|
| один объект | IProjectObject |
| список объектов | IReadOnlyList<IProjectObject> |
| текст, число, да / нет, словарь — одно | string |
| то же списком | IReadOnlyList<string> |
Что коду видно и что не видно
Section titled “Что коду видно и что не видно”| Видно | Не видно |
|---|---|
| То, что подано в его входы. Объекты проекта. | Столбцы строки книги, из которой позвали схему. Нужный столбец передайте в схему аргументом — в вызове это [TAG] — и подайте этот аргумент в код. |
Всё, что умеет IProjectObject: GetField, Name, списки, словари, связи. | Задать переменную шаблона код не может. Для этого есть шаг «Переменные шаблона». |
Форма выхода считает компилятор
Section titled “Форма выхода считает компилятор”Какой формы значение вернёт код, спрашивают у компилятора по самому коду, без счёта. От ответа зависит, что будет нарисовано на стрелке и чем палитра предложит шаг продолжить.
Ответ запоминается: разбор кода стоит столько же, сколько его сборка, а схема перерисовывается на каждую правку. Поэтому компилятора спрашивают в считанных местах — когда код проверяют кнопкой, когда уходят из окна кода и когда открывают схему целиком. До первого разбора код обещает текст.