Если вы уверены, что выражение в момент выполнения программы не может иметь значение Неопределено, то после этого выражения можно поставить символ «!» (восклицательный знак).
Смысл этой операции заключается только в том, чтобы убрать из описания типа тип Неопределено, если известно, что его там точно быть не может.
Проиллюстрировать это можно на примере структур (подробнее о структурах рассказывается в разделе «»).
Допустим, есть две структуры: Сотрудник и ПочтовыйАдрес.
структура Сотрудник
пер ФИО: Строка
пер Адрес: ПочтовыйАдрес?
пер Телефон: Строка?
конструктор (ФИО)
конструктор (ФИО, Адрес)
;
структура ПочтовыйАдрес
пер Страна: Строка?
пер Город: Строка
пер Улица: Строка?
пер Дом: Строка?
конструктор (Город)
;
Структура Сотрудник имеет поля ФИО, Адрес и Телефон. В поле Адрес содержится, в свою очередь, экземпляр другой структуры – ПочтовыйАдрес. Она имеет поля Страна, Город, Улица и Дом.
Сотрудник имеет два конструктора: можно указать только ФИО или ФИО и Адрес. ПочтовыйАдрес имеет конструктор, в котором можно указать только Город.
Например, в программном коде создается экземпляр сотрудника, и точно известно, что у него есть адрес.
Если просто присвоить этот адрес переменной АдресСотрудника, то она будет иметь составной тип ПочтовыйАдрес? (рис. 3.1).
пер Стажер = новый Сотрудник("Иванов", новый ПочтовыйАдрес("Владимир"))
пер АдресСотрудника = Стажер.Адрес
Рис. 3.1. Тип переменной «АдресСотрудника»
Но если точно известно, что в данном случае в переменной АдресСотрудника не может быть значения Неопределено, то можно использовать эту операцию, чтобы убрать тип Неопределено из описания типов.
пер Стажер = новый Сотрудник("Иванов", новый ПочтовыйАдрес("Владимир"))
пер АдресСотрудника = Стажер.Адрес!
Переменная АдресСотрудника будет иметь тип ПочтовыйАдрес (рис. 3.2).
Рис. 3.2. Тип переменной «АдресСотрудника»