Перейти к основному содержимому

Операция «как» — приведение типов

Операция как позволяет привести значение выражения слева к типу справа.

Синтаксис

выражение как тип
  • выражение — выражение, тип результата которого необходимо привести к требуемому типу;
  • тип — тип, к которому необходимо привести тип результата вычисления выражения. Этот тип должен быть одним из возможных типов для результата вычисления выражения.

В результате выполнения операции:

  • возвращается результат вычисления выражения, если приведение типов возможно;
  • выбрасывается исключение, если выполнить приведение типов невозможно.

Особенности использования

С помощью операции как нельзя выполнять преобразование типов, то есть нельзя, например, преобразовать значение типа Число в значение типа Строка. Используйте операцию как в тех случаях, когда значение выражения имеет составной тип и нужно привести его к одному конкретному типу.

Также операцию как можно использовать тогда, когда типом параметра метода выступает какой-либо базовый тип, например Объект. Параметр метода может использоваться в качестве входного параметра другого метода, который принимает значение конкретного типа, являющегося потомком типа Объект. Тогда вначале выполняется проверка, что значение имеет нужный тип (например, Строка), а затем выполняется приведение типов при передаче в другой метод.

Если необходимо присвоить значение какого-либо типа переменной, которая объявлена с типом неизвестно, то такое присваивание можно выполнять без использования операции как.

Примеры

Примеры приведения типов
пер Переменная: Строка|Число|Булево = 0
пер Переменная1 = Переменная как Число // ОК
пер Переменная2 = Переменная как Строка|Число // ОК
пер Переменная3 = Переменная как Дата // Ошибка компиляции: Несовместимые типы "Булево|Число|Строка" и "Дата"
пер Переменная4 = Переменная как Число|Дата // ОК
пер Переменная5 = Переменная как Строка|Дата // Ошибка выполнения: Значение типа "Число" не соответствует ожидаемому типу "Строка|Дата"
Пример приведения типа параметра метода
метод ПолучитьДлинуСтроки(Объект: Объект): Строка
если Объект это Строка
знч Длина = (Объект как Строка).Длина()
возврат "Длина строки: $Длина"
;
возврат "Это не строка"
;

метод ВычислитьДлину()
ПолучитьДлинуСтроки(100) // "Это не строка"
ПолучитьДлинуСтроки("Строка") // "Длина строки: 6"
;