LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка текстуально находятся рядом.

То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.

Простой пример ошибки, связанной с очисткой переменных в конце:

ресурс := нов(какойТоРесурс)
если какоеТоУсловие то
  делайЧтоТо
иначе
  попытка
    делайЧтоТоДругое
  выходя
    удали(ресурс) 

В ветке «если» ресурс не очищен. Если функция достаточно длинная, то легко проглядеть такую ошибку. Если же код написан как

ресурс := нов(какойТоРесурс)
выходя
  удали(ресурс)
кон
если какоеТоУсловие то
  делайЧтоТо
иначе
  делайЧтоТоДругое

То ошибиться (или тупо забыть очистить ресурс) гораздо труднее.

Исправление den73, :

Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка текстуально находятся рядом.

То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.

Простой пример ошибки, связанной с очисткой переменных в конце:

ресурс := нов(какойТоРесурс)
если какоеТоУсловие то
  делайЧтоТо
иначе
  попытка
    делайЧтоТоДругое
  выходя
    удали(ресурс) 

В ветке «если» ресурс не очищен. Если функция достаточно длинная, то легко проглядеть такую ошибку. Если же код написан как

ресурс := нов(какойТоРесурс)
выходя
  удалиРесурс
кон
если какоеТоУсловие то
  делайЧтоТо
иначе
  делайЧтоТоДругое

То ошибиться (или тупо забыть очистить ресурс) гораздо труднее.

Исправление den73, :

Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка текстуально находятся рядом.

То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.

Простой пример ошибки, связанной с очисткой переменных в конце:

ресурс := нов(какойТоРесурс)
если какоеТоУсловие то
  делайЧтоТо
иначе
  попытка
    делайЧтоТоДругое
  выходя
    удали(ресурс) 

В ветке «если» ресурс не очищен.

Исправление den73, :

Прекрасная идея defer, я подобное на Дельфях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка находятся рядом.

То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.

Исправление den73, :

Прекрасная идея defer, я подобное на Дельях делал где-то году в 2000, оно называлось finallyDo (а может я и заврался, но во всяком случае пытался это делать, не помню уже). Общая идея - в том, что инициализация ресурса и его очистка находятся рядом.

То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.

Исходная версия den73, :

Прекрасная идея defer, я подобное на Дельях делал где-то году в 2000, оно называлось finallyDo. Общая идея - в том, что инициализация ресурса и его очистка находятся рядом.

То, что это находится в конце функции - лишь привычка. При любом нелокальном переходе происходит скачок управления. Ты привык смотреть в конец, а теперь надо смотреть в начало. Если же посчитать экономию на скобочках, то она весьма весомая.