1C-Company / v8-code-style

Расширение для 1C:EDT, которое помогает разрабатывать конфигурации/приложения по стандартам 1С для платформы "1С:Предприятие 8".
Eclipse Public License 2.0
175 stars 53 forks source link

Проверки типов не учитывают тип Неопределено в роли признака необязательности #1241

Open RedMammoth opened 1 year ago

RedMammoth commented 1 year ago

image

ОбщийМодуль1:

// @strict-types

#Область ПрограммныйИнтерфейс

Процедура ТестПересеченияТипов() Экспорт
    переменная_с_другим_типом = 10;

    // несоблюдение контракта не диагностируется, но сценарий пока сложно представить
    ОбщийМодуль2.неопределено_явно_указан_в_типах_параметра(переменная_с_другим_типом);

    // несоблюдение контратка успешно диагностируется
    ОбщийМодуль2.неопределено_как_признак_необязательности_параметра(переменная_с_другим_типом);

    // несоблюдение контракта не диагностируется, но этот сцеанрий уже достаточно реалистичный,
    // по крайней мере я не вижу другого способа "безопасно" указать необязательное поле
    // указывать в комментарии, что поле может не существовать, а затем проверять через Свойство, мне кажется
    // менее безопасным, т.к. контекстная подсказка будет показывать поле и можно забыть глянуть в описание
    // (особенно если структура достаточно большая),
    ОбщийМодуль2.структура_с_необязательным_полем().НеобязательноеПоле = переменная_с_другим_типом;
КонецПроцедуры

#КонецОбласти

ОбщийМодуль2:

// @strict-types

#Область ПрограммныйИнтерфейс

// Неопределено явно указан в типах параметра.
// 
// Параметры:
//  параметр - Неопределено, Строка -
//
Процедура неопределено_явно_указан_в_типах_параметра(параметр) Экспорт
    // представить сценарий явного указания не могу
КонецПроцедуры

// Неопределено как признак необязательности параметра.
// 
// Параметры:
//  параметр - Строка
//
Процедура неопределено_как_признак_необязательности_параметра(параметр = Неопределено) Экспорт
    //
КонецПроцедуры

// Структура с необязательным полем.
// 
// Возвращаемое значение:
//  Структура:
// * НеобязательноеПоле - Неопределено, Строка -
//
Функция структура_с_необязательным_полем() Экспорт
    Данные = Новый Структура;
    Данные.Вставить("НеобязательноеПоле", Неопределено);
    Возврат Данные;
КонецФункции

#КонецОбласти

image

Без копирования поля в отдельную переменную было бы еще удобнее, на это заведу отдельное пожелание: image