Тестируем передачу выражений по ссылке

Перем Г;

// Испытания присваивания по ссылке.

// Тестовая процедура.
Процедура Тест(Б)
   
// вернем значение в переменную,
    // переданную по ссылке
   
Б=1;
КонецПроцедуры

// Следующие выражения и операторы НЕ СОХРАНЯЮТ ссылку.
// Присваивание по ссылке не происходит.
// Для вычисления выражения создается новая временная переменная
// в памяти или в стеке параметров вызова процедуры.

Г= 0 ; Тест( Г+0            ); Сообщить(Г); //Выводит: 0
Г= 0 ; Тест( -Г             ); Сообщить(Г); //Выводит: 0
Г= 0 ; Тест( +Г             ); Сообщить(Г); //Выводит: 0
Г= 0 ; Тест( Число(Г)       ); Сообщить(Г); //Выводит: 0
Г= 0 ; Тест( Цел(Г)         ); Сообщить(Г); //Выводит: 0
Г= 0 ; Тест( Вычислить("Г") ); Сообщить(Г); //Выводит: 0

// Следующие выражения и операторы СОХРАНЯЮТ ссылку,
// присваивание по ссылке происходит.

Г= 0 ; Тест( (Г)            ); Сообщить(Г); //Выводит: 1
Г= 0 ; Тест( Мин(Г)         ); Сообщить(Г); //Выводит: 1
Г= 0 ; Тест( ?(Истина,Г,)  ); Сообщить(Г); //Выводит: 1
Г= 0 ; Выполнить("Тест(Г)");   Сообщить(Г); //Выводит: 1



Это нужно иметь ввиду т.к. в типовых решениях часто применяется передача по ссылке, с получением результата в параметре Отказ.

Похожие материалы

Справочники

Документы

Отчеты

Обработки