Уточнение типов
Уточнение типов применяется для явного указания компилятору типов выражений или типов объектов в операторах вызова методов этих объектов. Уточнение типов производится с целью разрешения неопределенностей и для дополнительной проверки типов.
Синтаксис для уточнения типов выражений:
<имя типа> ( <выражение> )
Пример:
ВЫЧИСЛИТЬ // объявляем контейнерную переменную со смешанным типом элементов ПЕРЕМ *: ип [СТРОКА] = ( "фамилия": "Иванов", "дата": 12.01.2000 ) // хотим получить дату на день раньше ип["дата"] дата1 = ип["дата"] - 1 // ошибка времени выполнения // Тип первого операнда неизвестен, а тип второго операнда // числовой. Неопределенность типа переменной дата1. В этом случае // компилятор берет по умолчанию для дата1 тип второго аргумента. // Во время выполнения: несовместимые типы дата и число. // теперь уточним тип дата2 = ДАТА ( ип["дата"] ) - 1 // правильно // Компилятор знает, что при вычитании числа из // даты получится дата. В результата переменная дата2 имеет тип дата. // случай недопустимого уточнения дата3 = ДАТА ( "19.05.2016" ) // ошибка // В скобках стоит выражение строкового типа, несовместимого // с типом ДАТА. КОНЕЦ
Уточнение типов может использоваться не только в выражениях, но и в операторах вызова методов объектов . Это необходимо, когда объект является параметром смешанного типа или элементом индексной переменной смешанного типа. В этом случае синтаксис вызова будет выглядеть следующим образом:
Синтаксис для уточнения типов в операторах вызова методов объектов:
<имя типа> ( <объект> ). <имя метода> [ ( <параметры> ) ]
Пример:
// некий тип А, содержащий метод Ф ТИП А [ ФУНКЦИЯ Ф(СТРОКА: текст) СООБЩЕНИЕ(текст) КОНЕЦ_ФУНКЦИИ ] // общая индексная переменная смешанного типа, начально содержащая объект типа А ПЕРЕМ *: оп[ЧИСЛО] = ( 1: А[] ); ВЫЧИСЛИТЬ // вызываем метод Ф объекта оп[1], для этого явно указываем, что оп[1] имеет тип А А( оп[1] ).Ф( "Здравствуй, мир!" ) КОНЕЦ
Обработка уточнений типов производится на этапе компиляции и не влияет на скорость работы программы. В случае, когда тип выражения, определенный компилятором, не совместим с типом уточнения, возникает ошибка. Имеет смысл всегда использовать уточнение типов при работе с неопределенными (смешанными) типами результатов и параметров функций, элементов и индексов индексных переменных и т.п.
Для уточнения типа переменной контейнерного типа используется особый синтаксис. Так как элементы контейнера заключаются в круглые скобки, которые в дальнейшем будут восприняты компилятором как константа, при указании компилятору явного типа контейнера нужно указывать двойные круглые скобки: первые - согласно синтаксису уточнения типа, вторые - согласно синтаксису написания контейнерных переменных.
Синтаксис для уточнения типа переменной контейнерного типа:
<имя контейнерного типа> (( <элементы контейнера> )
Пример:
ТИП Конт = ИНДЕКС СТРОКА: @[ЦЕЛОЕ(), СТРОКА]; ВЫЧИСЛИТЬ ПЕРЕМ х = Конт((1, "А": "Альфа", 2, "Б": "Бета", 3, "Г": "Гамма")) ОТЛАДКА(х) КОНЕЦ