Книга знаний

1С:Предприятие / Приемы программирования

Видимость переменных - неклассический подход

Как-то все программисты уже привыкли, что переменные бывают только локальными или глобальными. Мы расширим понятие видимости переменных и покажем, как смоделировать такую видимость во встроенном языке, а затем покажем, где такое можно применять.Автор статьи:
Последняя редакция №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С]

О практическом применении - расмотрим пример проверки правильности объекта.


Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика