Сообщение Re[3]: Какие у исключений проблемы? от 08.11.2014 17:28
Изменено 08.11.2014 17:30 Pauel
Здравствуйте, tyomchick, Вы писали:
T>Меня тоже например раздражает, когда функция открытия файла кидает исключение. Ошибку открытия файла почти всегда удобнее обработать без исключений.
Если есть восстановление после сбоя, то ситуация никакая не исключительная, потому исключения не нужны.
Надо отделять исключения, сбои, восстановления.
Сбой — это локальная проблема, ошибка. Исключение — это отсутствие возможность продолжать после сбоя. Восстановление — это наличие возможности продолжать после сбоя. Исключение, как правило, означает, что информации обработать ошибку в локальном скопе просто нет. Восстановление, наоборот, означает что есть вся информация обработать ошибку.
Отсюда ясно, что один и тот же сбой в зависимости от приложений может потребовать или исключения или восстановления.
alex_public говорит, что восстановление лучше, кошернее, но никак не хочет объяснить наиболее типичный сценарий — N последовательных шагов, сбой в любом прерывает весь сценарий.
Например — сохранить данные пользователя в конкретный файл. Открыть, получить данные, серилизовать, записать, закрыть. В любом месте если возникает ошибка — весь сценарий фейлится.
Другой сценарий — сохранить критические данные приложения во что бы то ни стало, даже вне контроля пользователя. Все почти тож самое, но есть восстановление — не открылся один файл, откроется другой, нет доступных носителей для файлов — есть БД, сеть, почта и тд и тд тд.
Здесь исключение возникает если все способы восстановления ошибок исчерпаны.
При этом, фокус, линейная логика так же присутствует — фейл при получении данных приводит к исключению. фейл при серилизации так же приводит к исключению. Не нашли куда можно сохранить — так же исключение.
Итого — линейная логика есть всегда. Восстановление есть иногда. Наличие резервных путей никак не отменяет наличия линейной логики.
Теоретически, можно сделать навроде
Но вообще уже здесь всякие монады смотрятся гораздо интереснее
T>Меня тоже например раздражает, когда функция открытия файла кидает исключение. Ошибку открытия файла почти всегда удобнее обработать без исключений.
Если есть восстановление после сбоя, то ситуация никакая не исключительная, потому исключения не нужны.
Надо отделять исключения, сбои, восстановления.
Сбой — это локальная проблема, ошибка. Исключение — это отсутствие возможность продолжать после сбоя. Восстановление — это наличие возможности продолжать после сбоя. Исключение, как правило, означает, что информации обработать ошибку в локальном скопе просто нет. Восстановление, наоборот, означает что есть вся информация обработать ошибку.
Отсюда ясно, что один и тот же сбой в зависимости от приложений может потребовать или исключения или восстановления.
alex_public говорит, что восстановление лучше, кошернее, но никак не хочет объяснить наиболее типичный сценарий — N последовательных шагов, сбой в любом прерывает весь сценарий.
Например — сохранить данные пользователя в конкретный файл. Открыть, получить данные, серилизовать, записать, закрыть. В любом месте если возникает ошибка — весь сценарий фейлится.
Другой сценарий — сохранить критические данные приложения во что бы то ни стало, даже вне контроля пользователя. Все почти тож самое, но есть восстановление — не открылся один файл, откроется другой, нет доступных носителей для файлов — есть БД, сеть, почта и тд и тд тд.
Здесь исключение возникает если все способы восстановления ошибок исчерпаны.
При этом, фокус, линейная логика так же присутствует — фейл при получении данных приводит к исключению. фейл при серилизации так же приводит к исключению. Не нашли куда можно сохранить — так же исключение.
Итого — линейная логика есть всегда. Восстановление есть иногда. Наличие резервных путей никак не отменяет наличия линейной логики.
Теоретически, можно сделать навроде
var x = null;
try{
x = sourceFromFile('a');
fallback { x = sourceFromFile('b'); }
fallback { x = sourceFromFile('z'); }
} catch() {
...
}Но вообще уже здесь всякие монады смотрятся гораздо интереснее
Re[3]: Какие у исключений проблемы?
Здравствуйте, tyomchick, Вы писали:
T>Меня тоже например раздражает, когда функция открытия файла кидает исключение. Ошибку открытия файла почти всегда удобнее обработать без исключений.
Если есть восстановление после сбоя, то ситуация никакая не исключительная, потому исключения не нужны.
Надо отделять исключения, сбои, восстановления.
Сбой — это локальная проблема, ошибка. Исключение — это отсутствие возможность продолжать после сбоя. Восстановление — это наличие возможности продолжать после сбоя. Исключение, как правило, означает, что информации обработать ошибку в локальном скопе просто нет. Восстановление, наоборот, означает что есть вся информация обработать ошибку.
Отсюда ясно, что один и тот же сбой в зависимости от приложений может потребовать или исключения или восстановления.
alex_public говорит, что восстановление лучше, кошернее, но никак не хочет объяснить наиболее типичный сценарий — N последовательных шагов, сбой в любом прерывает весь сценарий.
Например — сохранить данные пользователя в конкретный файл. Открыть, получить данные, серилизовать, записать, закрыть. В любом месте если возникает ошибка — весь сценарий фейлится.
Другой сценарий — сохранить критические данные приложения во что бы то ни стало, даже вне контроля пользователя. Все почти тож самое, но есть восстановление — не открылся один файл, откроется другой, нет доступных носителей для файлов — есть БД, сеть, почта и тд и тд тд.
Здесь исключение возникает если все способы восстановления ошибок исчерпаны.
При этом, фокус, линейная логика так же присутствует — фейл при получении данных приводит к исключению. фейл при серилизации так же приводит к исключению. Не нашли куда можно сохранить — так же исключение.
Итого — линейная логика есть всегда. Восстановление есть иногда. Наличие резервных путей никак не отменяет наличия линейной логики.
Теоретически, можно сделать навроде
Но вообще уже здесь всякие монады смотрятся гораздо интереснее
T>Меня тоже например раздражает, когда функция открытия файла кидает исключение. Ошибку открытия файла почти всегда удобнее обработать без исключений.
Если есть восстановление после сбоя, то ситуация никакая не исключительная, потому исключения не нужны.
Надо отделять исключения, сбои, восстановления.
Сбой — это локальная проблема, ошибка. Исключение — это отсутствие возможность продолжать после сбоя. Восстановление — это наличие возможности продолжать после сбоя. Исключение, как правило, означает, что информации обработать ошибку в локальном скопе просто нет. Восстановление, наоборот, означает что есть вся информация обработать ошибку.
Отсюда ясно, что один и тот же сбой в зависимости от приложений может потребовать или исключения или восстановления.
alex_public говорит, что восстановление лучше, кошернее, но никак не хочет объяснить наиболее типичный сценарий — N последовательных шагов, сбой в любом прерывает весь сценарий.
Например — сохранить данные пользователя в конкретный файл. Открыть, получить данные, серилизовать, записать, закрыть. В любом месте если возникает ошибка — весь сценарий фейлится.
Другой сценарий — сохранить критические данные приложения во что бы то ни стало, даже вне контроля пользователя. Все почти тож самое, но есть восстановление — не открылся один файл, откроется другой, нет доступных носителей для файлов — есть БД, сеть, почта и тд и тд тд.
Здесь исключение возникает если все способы восстановления ошибок исчерпаны.
При этом, фокус, линейная логика так же присутствует — фейл при получении данных приводит к исключению. фейл при серилизации так же приводит к исключению. Не нашли куда можно сохранить — так же исключение.
Итого — линейная логика есть всегда. Восстановление есть иногда. Наличие резервных путей никак не отменяет наличия линейной логики.
Теоретически, можно сделать навроде
var x = null;
try{
x = sourceFromFile('a');
fallback x = sourceFromFile('b');
fallback x = sourceFromFile('z');
} catch() {
...
}Но вообще уже здесь всякие монады смотрятся гораздо интереснее