Видимость переменных - неклассический подходКак-то все программисты уже привыкли, что переменные бывают только локальными или глобальными.
Мы расширим понятие видимости переменных и покажем, как смоделировать такую видимость во встроенном языке, а затем покажем, где такое можно применять. | | Автор статьи: Последняя редакция №1 от 18.07.06 URL: http://kb.mista.ru/article.php?id=299 | |
Ключевые слова: видимость
Было бы неплохо, если бы в текущем контексте выполнения кода функции были видны не только глобальные переменные и локальные переменные текущей функции, но и переменные функций, из которой была вызывана данная.
Посмотрите на пример, как выглядел бы код. В функции Ф4 видны все переменные, объявленные в предыдущих вызовах (при этом переменные с одинаковым именем замещаются):
Функция Ф1(А,Б,В)
Сообщить(А, Б, В); //1,2,0
Ф2(В=3, Г=4); //В замещается на 3
Ф3(Г=6); //Должно передаться исходное В=0
КонецФункции
Функция Ф2(В, Г)
Сообщить(А, Б, В, Г); //1,2,3,4
КонецФункции
Функция Ф3(В, Г)
Сообщить(А, Б, В, Г); //1,2,5,6
КонецФункции
Ф1(А=1, Б=2, В=0);
В 1С это можно смоделировать так:
Функция обПрм(Родитель, Ребенок) Экспорт
Ребенок.Вставить("Родитель", Родитель);
Возврат Ребенок;
КонецФункции
Функция обСвойство(П, Параметр, Зн)
Перем Родитель;
Если НЕ П.Свойство(Параметр, Зн) Тогда
Если НЕ П.Свойство("Родитель", Родитель) Тогда
Возврат ложь;
Иначе
Возврат обДоступСвойство(Родитель, Параметр, Зн);
КонецЕсли;
Иначе
Возврат истина;
КонецЕсли;
КонецФункции
Функция обЗначение(П, Параметр, ЗнН=Неопределено)
Перем Зн;
Если обСвойство(П, Параметр, Зн) Тогда
Возврат Зн;
Иначе
Возврат ЗнН;
КонецЕсли;
КонецФункции
Функция Ф1(П)
Сообщить(обЗначение(П,"А"), обЗначение(П,"Б")); //1,2
Ф2(обПрм(П, Новый Структура("В, Г", 3, 4)));
Ф3(обПрм(П, Новый Структура("Г", 6)));
Ф3(В=5, Г=6);
КонецФункции
Функция Ф2(П)
Сообщить(обЗначение(П,"А"), обЗначение(П,"Б"), обЗначение(П,"В"), обЗначение(П,"Г")); //1,2,3,4
КонецФункции
Функция Ф3(П)
Сообщить(обЗначение(П,"А"), обЗначение(П,"Б"), обЗначение(П,"В"), обЗначение(П,"Г")); //1,2,0,6
КонецФункции
Ф1(Новый Структура("А,Б,В", 1,2,0);
[/1С]
О практическом применении - расмотрим пример проверки правильности объекта.
|