Реализация конструкции try-finally на VBScript
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
| − | Грамотно написанный программный код должен заботиться о высвобождении выделенных ресурсов по окончании их использования. В Делфи мы имеем конструкцию try-finally, которая гарантирует, что код в секции finally будет выполнен в любом случае: | + | Грамотно написанный программный код должен заботиться о высвобождении выделенных ресурсов по окончании их использования даже в случае аварийного завершения функции или процедуры. В Делфи мы имеем конструкцию try-finally, которая гарантирует, что код в секции finally будет выполнен в любом случае: |
... | ... | ||
| Строка 10: | Строка 10: | ||
// высвобождение ресурса | // высвобождение ресурса | ||
end; | end; | ||
| + | ... | ||
| + | |||
| + | В языке VBScript такая конструкция отсутствует, а обработка ошибок с помощью On Error Resume Next/On Error GoTo 0 весьма трудоемка. Как быть? На помощь приходит свойство экземпляров классов VBScript, которые автоматически высвобождаются по выходу из соответствующей области видимости. Вспомогательный класс [[TCreator]] уже долгое время используется для уничтожения объектов по завершении кода функции или процедуры. Его метод GetObject создает объект с помощью вызова функции Designer.CreateObject и сохраняет ссылку на созданный объект во внутреннем списке. По выходу из кода, объект TCreator уничтожается, при этом выполняется его деструктор, который просматривает список ранее созданных объектов и вызывает Designer.DestroyObject для каждого из них. | ||
Версия 16:48, 1 марта 2007
Грамотно написанный программный код должен заботиться о высвобождении выделенных ресурсов по окончании их использования даже в случае аварийного завершения функции или процедуры. В Делфи мы имеем конструкцию try-finally, которая гарантирует, что код в секции finally будет выполнен в любом случае:
... // выделение ресурса try ... // использование ресурса ... finally // высвобождение ресурса end; ...
В языке VBScript такая конструкция отсутствует, а обработка ошибок с помощью On Error Resume Next/On Error GoTo 0 весьма трудоемка. Как быть? На помощь приходит свойство экземпляров классов VBScript, которые автоматически высвобождаются по выходу из соответствующей области видимости. Вспомогательный класс TCreator уже долгое время используется для уничтожения объектов по завершении кода функции или процедуры. Его метод GetObject создает объект с помощью вызова функции Designer.CreateObject и сохраняет ссылку на созданный объект во внутреннем списке. По выходу из кода, объект TCreator уничтожается, при этом выполняется его деструктор, который просматривает список ранее созданных объектов и вызывает Designer.DestroyObject для каждого из них.