История изменений
Исправление den73, (текущая версия) :
Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка текстуально находятся рядом.
То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.
Простой пример ошибки, связанной с очисткой переменных в конце:
ресурс := нов(какойТоРесурс)
если какоеТоУсловие то
делайЧтоТо
иначе
попытка
делайЧтоТоДругое
выходя
удали(ресурс)
В ветке «если» ресурс не очищен. Если функция достаточно длинная, то легко проглядеть такую ошибку. Если же код написан как
ресурс := нов(какойТоРесурс)
выходя
удали(ресурс)
кон
если какоеТоУсловие то
делайЧтоТо
иначе
делайЧтоТоДругое
То ошибиться (или тупо забыть очистить ресурс) гораздо труднее.
Исправление den73, :
Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка текстуально находятся рядом.
То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.
Простой пример ошибки, связанной с очисткой переменных в конце:
ресурс := нов(какойТоРесурс)
если какоеТоУсловие то
делайЧтоТо
иначе
попытка
делайЧтоТоДругое
выходя
удали(ресурс)
В ветке «если» ресурс не очищен. Если функция достаточно длинная, то легко проглядеть такую ошибку. Если же код написан как
ресурс := нов(какойТоРесурс)
выходя
удалиРесурс
кон
если какоеТоУсловие то
делайЧтоТо
иначе
делайЧтоТоДругое
То ошибиться (или тупо забыть очистить ресурс) гораздо труднее.
Исправление den73, :
Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка текстуально находятся рядом.
То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.
Простой пример ошибки, связанной с очисткой переменных в конце:
ресурс := нов(какойТоРесурс)
если какоеТоУсловие то
делайЧтоТо
иначе
попытка
делайЧтоТоДругое
выходя
удали(ресурс)
В ветке «если» ресурс не очищен.
Исправление den73, :
Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка находятся рядом.
То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.
Исправление den73, :
Прекрасная идея defer, я подобное на Дельях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка находятся рядом.
То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.
Исходная версия den73, :
Прекрасная идея defer, я подобное на Дельях делал где-то году в 2000, оно называлось finallyDo. Общая идея - в том, что инициализация ресурса и его очистка находятся рядом.
То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.