--- title: Переменные и выражения MD summary: Строки, списки, таблицы, проверка существования и опасность потери контекста свойства. section: scripting kind: guide status: example tags: ["md","set_value","list","table","namespace","переменные"] sources: ["https://wiki.egosoft.com/X4%20Foundations%20Wiki/Modding%20Support/"] --- ## Значение и выражение В MD многие атрибуты содержат выражения. XML-кавычки отделяют атрибут, а внутренние одинарные кавычки задают строковый литерал MD. ```xml ``` Список и таблица нужны для разных способов доступа. Элементы списка читаются как `$Items.{1}`, именованные ключи таблицы - как `$ByID.{$Key}`. ## Проверяйте форму запроса Пример проверки входа от UI внутри обработчика: ```xml ``` Корректная длина списка не подтверждает типы его элементов. Перед применением настройки проверьте текст и значение переключателя. ## Существование и область видимости `not $Records?` используется для проверки наличия переменной. Для объекта дополнительно проверяется `.exists`. Ссылка на другой cue явно указывает контекст, например `Init.$Records`. Не заменяйте проверку существования переменной проверкой её содержимого: `false`, пустой список и отсутствующая переменная означают разные состояния. ## Свойство может зависеть от контекста При исследовании экипажа промежуточное присваивание `npctemplateentry` потеряло нужный контекст. Рабочий вариант читал полный путь к признаку человека непосредственно от корабля. Это наблюдение относится к конкретному типу псевдосвойства. Не превращайте его в правило «MD никогда не позволяет промежуточные переменные». Изолируйте спорное выражение и сравните результат в игре.