Файл: Функции Продолжим исследовать и улучшать пример с количеством занятий в каждый из дней. Посмотрите на ту его часть, которая, зная день недели, узнает вам количество занятий (рис. 1). Рис. 1.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.01.2024
Просмотров: 76
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Контекст и область видимости
Вы, наверное, обратили внимание на то, что в вашем примере имена фактического и формального параметра совпали – ДеньНедели (рис. 20).
Рис. 3.20. Имена фактического и формального параметров
У вас это получилось случайно. Просто потому, что вы перетаскивали фрагмент программы из одного места в другое.
На самом деле имена формальных и фактических параметров не совпадают. В этом нет необходимости.
Чтобы разобраться с этим, упростите пример. В процедуре создайте переменную и напишите вызов функции. А функцию тоже упростите, чтобы она возвращала только два значения: 5 или 6. И обратите внимание, что в этом примере специально изменены имена переменных так, чтобы они были разными внутри функции и снаружи нее (рис. 21).
Рис. 21. Упрощенный пример
Установите точку останова на первой инструкции присваивания, запустите «1С:Предприятие» в режиме отладки и откройте локальные переменные. Они вам сейчас очень помогут разобраться с тем, что будет происходить (рис. 22).
Рис. 22. Локальный контекст процедуры
Сейчас вы находитесь в процедуре ПриНачалеРаботыСистемы(). Вы пока еще не знакомились с тем, что такое процедуры. Но это не страшно. Для этого примера будет достаточно представить, что процедура – это то же самое, что и функция.
Так вот. Вы находитесь внутри процедуры. И здесь вам доступны переменные НомерДняНедели и Занятий. Они показаны в окне локальных переменных. Это те переменные, которые создаются и определяются в этой процедуре.
Теперь сделайте пару шагов, чтобы перейти в функцию (рис. 23).
Рис. 23. Локальный контекст функции
Обратите внимание на то, что вы видите в окне локальных переменных. НомерДняНедели и Занятий исчезли. Зато вместо них появились ДеньНедели и КоличествоЗанятий, которые определены внутри этой функции.
Теперь, если вы пройдете всю функцию и вернетесь обратно в процедуру, состав локальных переменных снова изменится (рис. 24).
Рис. 24. Локальный контекст процедуры
Он станет таким, каким он был в самом начале.
Для обозначения этой ситуации во встроенном языке используют слово контекст. Контекст – это то, что доступно вам в том месте программы, в котором вы находитесь в данный момент.
Если переменная определена в какой-то функции, то она доступна только в ней. И недоступна в других функциях. Поэтому в разных функциях вы можете создавать переменные с разными именами или с одинаковыми именами. В любом случае это будут разные переменные.
Это правило относится и к параметрам функций. Переменные, которые указаны в качестве фактического и формального параметра, могут иметь одинаковые имена. Или разные имена. Это не важно. Потому что каждая из этих переменных существует только в контексте «своей» процедуры или функции.
Теперь познакомьтесь с другим термином, который часто используется при написании программ. Это область видимости.
Область видимости чего-то – это область конфигурации, откуда это что-то видно и доступно.
Область видимости переменных ограничивается той функцией или процедурой, внутри которой они созданы.
Если быть совсем точным, то область видимости переменной начинается с инструкции присваивания, в которой она создается, и заканчивается концом функции или процедуры (рис. 25).
Рис. 25. Область видимости переменной «НомерДняНедели»
Ради развлечения попробуйте использовать переменную НомерДняНедели в самом начале процедуры. Например, так, как на рисунке 26.
Рис. 26. Попытка использовать процедуру до ее определения
Если вы попробуете запустить такую программу, то получите вполне ожидаемую ошибку (рис. 27).
Рис. 27. Сообщение об ошибке
Действительно, в третьей строке переменная НомерДняНедели еще не определена. И платформа о ней ничего не знает. Эта переменная появится только двумя строками ниже.
У процедур и функций тоже есть своя область видимости. Это весь модуль, в котором они определены. Именно поэтому и существует возможность вызвать функцию или процедуру из любого места модуля. Например, как в вашем примере, из другой процедуры.
Процедуры
Теперь, когда вы умеете создавать и использовать функции, можно заняться изучением процедур.
Процедуры очень похожи на функции. Есть только одно отличие. Процедура ничего не возвращает. Она просто выполняет инструкции, которые находятся в ее теле.
Во всем остальном процедуры выглядят точно так же, как функции, которые вам уже хорошо известны. Вместо слова Функция используется Процедура, а вместо КонецФункции используется КонецПроцедуры (рис. 28).
Рис. 28. Пример процедуры
В этом примере у процедуры нет параметров, но если нужно, вы можете их указать так же, как и в функции.
Напишите в своей конфигурации этот пример. Процедура в этом примере проверяет, какой сейчас день недели. Если номер дня недели равен 7 (воскресенье), она выводит на экран напоминание о том, что завтра нужно идти в школу.
Запустите этот пример и посмотрите, как выглядит это напоминание. Но не забывайте, что оно появится только в воскресенье. Если вы читаете книгу не в воскресенье, то вместо 7 напишите номер вашего текущего дня недели.
Оповещение появится в небольшом окне в правой нижней части экрана, а затем постепенно пропадет (рис. 29).
Рис. 29. Оповещение пользователя
Для вывода такого оповещения вы использовали встроенную процедуру ПоказатьОповещениеПользователя(). Вы о ней ничего не знаете, просто написали так, как было на рисунке. Но наверняка вы хотите узнать, для чего нужна эта процедура и как ею пользоваться.
В этом вам поможет синтакс-помощник. Причем найти в нем эту процедуру очень просто.
Когда в тексте программы вам попадается незнакомая процедура или функция встроенного языка, вы можете просто установить на нее курсор и нажать сочетание клавиш Ctrl + F1. Откроется синтакс-помощник, и в его нижнем окне будет показано описание процедуры или функции (рис. 30).
Рис. 30. Описание процедуры в синтакс-помощнике
Если вы захотите узнать, какие еще есть похожие процедуры и функции, нажмите кнопку Найти текущий элемент в дереве
на командной панели (рис. 31).
Рис. 31. Кнопка «Найти текущий элемент в дереве»
В верхнем окне синтакс-помощник раскроет дерево и отметит в нем вашу процедуру.
Если вы пролистаете дерево вверх, то увидите, что есть еще большое количество процедур и функций, предназначенных для интерактивной работы. То есть для «общения» с пользователем (рис. 32).
Рис. 32. Процедуры и функции интерактивной работы
| Задание 1 Создайте функцию, которая получает значение типа Дата. А возвращает эта функция текстовое представление месяца и года этой даты. Для формирования текстового представления используйте функцию ПредставлениеПериода(). Ее описание вы найдете в синтакс-помощнике в ветке Глобальный контекст – Функции форматирования. |
| Задание 2 Возьмите программу из задания 5 лекции 2. Преобразуйте ее в функцию, которая получает две даты, а возвращает их разность в виде количества часов, минут и секунд. |
| Задание 3 Пример из задания 1 преобразуйте в процедуру. Текстовое представление месяца и года переданной даты показывайте пользователю с помощью функции ПоказатьОповещениеПользователя(). |
| . Задание 4 Пример из задания 2 преобразуйте в процедуру. Представление периода показывайте пользователю с помощью функции ПоказатьОповещениеПользователя(). |