История изменений
Исправление byko3y, (текущая версия) :
Я обычно тестирую хотя бы раз весь написанный код. Написать throw в середине кода и посмотреть что будет не сложно. Писать код, который ни разу не исполнялся – ошибочная практика
А по-хорошему нужно бы потестить каждую строчку на реакцию на throw. И вот ты уже получаешь число тестов, равное числу строк с действиями у тебя в коде. Именно отсюда родилась концепция структурного программирования, которая избегает этой проблемы, ограничивая путь выполнения программы строгими блоками.
В C++ в отличии от Оберона есть UB и он не умеет кидать и обрабатывать исключения от разыменовывания NULL указателей и прочего
Delphi умеет, у меня бойцы все исключения перехватывали и игнорировали... Так и работало, пока прога не падала замертво с повреждением пользовательских данных. Проблема ведь заключается НЕ в самом перехвате ошибки, а в том, что ошибка возникла из-за нарушения целостности состояния относительно исполняемого кода — дальше хоть перехватывай, хоть не перехватывай, а разницы нет — программа «посыпалась», потому что в ней возникло состояние, которое имеющийся код не способен переварить. Можно только перезапустить программу, но это можно с любым ЯП сделать. Особенно тяжело будет что-то сделать если проблемное состояние — это чрезмерное потребление ресурсов из-за кодерской ошибки.
Исходная версия byko3y, :
Я обычно тестирую хотя бы раз весь написанный код. Написать throw в середине кода и посмотреть что будет не сложно. Писать код, который ни разу не исполнялся – ошибочная практика
А по-хорошему нужно бы потестить каждую строчку на реакцию на throw. И вот ты уже получаешь число тестов, равное числу строк с действиями у тебя в коде. Именно отсюда родилась концепция структурного программирования, которая избегает этой проблемы, ограничивая путь выполнения программы строгими блоками.
В C++ в отличии от Оберона есть UB и он не умеет кидать и обрабатывать исключения от разыменовывания NULL указателей и прочего
Delphi умеет, у меня бойцы все исключения перехватывали и игнорировали... Так и работало, пока прога не падала замертво с повреждением пользовательских данных. Проблема ведь заключается в самом перехвате ошибки, а в том, что ошибка возникла из-за нарушения целостности состояния относительно исполняемого кода — дальше хоть перехватывай, хоть не перехватывай, а разницы нет — программа «посыпалась», потому что в ней возникло состояние, которое имеющийся код не способен переварить. Можно только перезапустить программу, но это можно с любым ЯП сделать. Особенно тяжело будет что-то сделать если проблемное состояние — это чрезмерное потребление ресурсов из-за кодерской ошибки.