haword писал(а):вы объявили переменную но не зафиналили ее
Кого я где не зафиналил? Всё там само зафиналивается из-за работы через интерфейсы с подсчётом ссылок, в том и дело.
https://ideone.com/kSOIxl.
Выше уже объяснялось, когда нужен контроль над зафиналиванием с большей гранулярностью, чем тело процедуры, и что скоупнутые переменные для этого идеально подходят.
MylnikovDm писал(а):Возможно, что я излишне старомоден, но я предпочитаю чётко видеть в коде, где и когда будут освобождаться те или иные ресурсы.
Так автоматические переменные и имеют это чёткое место — конец своей области видимости.
MylnikovDm писал(а):А разве у нас есть такие седы разработки, где любой специально написанный идиотизм всегда будет правильным?
Этот идиотизм было легко допустить, т. к. первоначальный вариант заведомо не бросал исключений, поэтому finally был необязателен.
Хорошо, когда написать неправильный код СЛОЖНЕЕ правильного.
Например, система типов не даёт присвоить несовместимые типы, или, наоборот, автоматически приводит одни типы к другим (расширяет integer до double).
Автоматические переменные аналогично сокращают пространство для ошибок.
Представь, что при использовании в выражении разных типов чисел (integer + double) integer'ы бы не расширялись до double автоматически, а выдавали мусор, и на примеры, когда из-за этого замена типа переменной ломает код, тебе бы отвечали: «Так нечего писать идиотизм, меня совершенно не напрягают ручные приведения типов, я предпочитаю всегда чётко видеть типы операндов». Для меня это точно так же звучит.