Зачем нужны Empty и NotEmpty
- Одна точка истины для «пустоты» строк, ссылок, коллекций и т. п.
- Читаемость:
Если A1sO.Empty(Знач)вместо набора разнородных проверок. - Снижение ошибок: 0 и Ложь — это не «пусто».
Дальнейшие утилиты с числами/датами — в Днях 12–13. Здесь только проверка наличия значения.
Базовая семантика
A1sO.Empty(X)возвращает Истина, если:- X = Неопределено;
- Строка и
ПустаяСтрока(X); - Ссылка и
X.Пустая(); - Коллекция/таблица/структура и
Количество() = 0.
A1sO.NotEmpty(X)— инверсия: значение присутствует (в т. ч. 0 и Ложь считаются «есть значение»).
Важно: 0 и Ложь — не пусто. Для числовых «по
умолчанию» используйте День 13 (NumOrZero), для дат — День 12.
Примеры использования
Строки
// "" → пусто; " " (если нужно) — решайте валидацией на уровне A1sS (День 18–20)
Если A1sO.Empty("") Тогда
A1sLog.Info("Day10", "Пустая строка");
КонецЕсли;
Если A1sO.NotEmpty("Кабель") Тогда
A1sLog.Info("Day10", "Непустая строка");
КонецЕсли;
Ссылки
Пер = Справочники.Номенклатура.НайтиПоНаименованию("Кабель ПВС");
Если A1sO.Empty(Пер) Тогда
A1sLog.Info("Day10", "Ссылка пустая/не найдена");
Иначе
A1sLog.Info("Day10", "Есть ссылка: " + Пер);
КонецЕсли;
Коллекции и таблицы
Таб = A1sQ.Unload("ВЫБРАТЬ 1 КАК One");
Если A1sO.NotEmpty(Таб) Тогда
Сообщить("Строк: " + Таб.Количество());
КонецЕсли;
Масс = Новый Массив;
Если A1sO.Empty(Масс) Тогда
Масс.Добавить("Первый элемент");
КонецЕсли;
Булево и число
// Ложь/Истина — это значение (не пусто)
Если A1sO.NotEmpty(Ложь) Тогда
A1sLog.Info("Day10", "Булево задано, пусть и Ложь");
КонецЕсли;
// 0 — это число, не пусто
Если A1sO.NotEmpty(0) Тогда
A1sLog.Info("Day10", "Ноль — валидное значение");
КонецЕсли;
Охранные условия (guard clauses)
Сокращаем вложенность: выходим рано, если входные данные пусты.
Процедура ОбновитьЦену(Товар, ЦенаНовая) Экспорт
Если A1sO.Empty(Товар) Тогда
A1sLog.Warn("Day10", "Нет товара — выходим");
Возврат;
КонецЕсли;
Если A1sO.Empty(ЦенаНовая) Тогда
A1sLog.Warn("Day10", "Цена не задана — выходим");
Возврат;
КонецЕсли;
// Здесь гарантировано «есть значения»
// ...
КонецПроцедуры
Проверки наборов данных
Часто удобно проверить «и параметр, и результат» одной логикой.
Функция НайтиИмена(Маска, Лимит = 20) Экспорт
Если A1sO.Empty(Маска) Тогда Возврат Новый Массив; КонецЕсли;
ТекстQ = "
|ВЫБРАТЬ ПЕРВЫЕ &Лимит
| Ном.Наименование КАК Name
|ИЗ Справочник.Номенклатура КАК Ном
|ГДЕ Ном.Наименование ПОДОБНО &Маска
|УПОРЯДОЧИТЬ ПО Name
";
Таб = A1sQ.Unload(ТекстQ, Лимит, Маска);
Если A1sO.Empty(Таб) Тогда Возврат Новый Массив; КонецЕсли;
Возврат Таб.ВыгрузитьКолонку("Name");
КонецФункции
Анти-паттерны
- Считать 0 «пустым» — это логическая ошибка для чисел.
- Считать Ложь «пустым» — это ломает булеву логику.
- Проверять строку на пустоту вручную в каждом месте — используйте
Empty/NotEmptyдля единообразия.
Микро-шаблоны для проекта
Безопасное получение «первого непустого»
Функция FirstNotEmpty(Знач1, Знач2, Знач3 = Неопределено) Экспорт
Если A1sO.NotEmpty(Знач1) Тогда Возврат Знач1; КонецЕсли;
Если A1sO.NotEmpty(Знач2) Тогда Возврат Знач2; КонецЕсли;
Если A1sO.NotEmpty(Знач3) Тогда Возврат Знач3; КонецЕсли;
Возврат Неопределено;
КонецФункции
Проверка обязательных полей формы
Функция ВалидироватьКарточку(Имя, Группа, Код) Экспорт
Ош = Новый Массив;
Если A1sO.Empty(Имя) Тогда Ош.Добавить("Имя обязательно"); КонецЕсли;
Если A1sO.Empty(Группа) Тогда Ош.Добавить("Не выбрана группа"); КонецЕсли;
// Код может быть "0" — это допустимо
Если A1sO.Empty(Код) Тогда Ош.Добавить("Код не задан"); КонецЕсли;
Возврат Ош; // пустой массив = валидно
КонецФункции
Практика (15–30 минут)
- Замените разрозненные проверки пустоты в одном из модулей на
A1sO.Empty/NotEmpty. - Добавьте охранные условия в процедуру сохранения сущности.
- Напишите утилиту FirstNotEmpty и примените её в двух местах.
- Сделайте валидацию формы: соберите массив ошибок и выведите пользователю.
Чек-лист
- □ Использую
Empty/NotEmptyдля единообразия. - □ Не считаю 0 и Ложь «пустыми».
- □ Применяю guard-clauses для раннего выхода.
- □ Убрал дублирующиеся ручные проверки.
Что дальше
День 11: A1sO — работа с коллекциями — безопасные проверки, извлечение и преобразования.