|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
try vs return в обработке ошибок15.11.2012, 23:04. Показов 1321. Ответов 11
Метки нет (Все метки)
Скажите пожалуйста, как лучше обрабатывать ошибку:
return ... или throw ... ? Если функция типа void Добавлено через 13 минут вверх Добавлено через 12 минут выше_
0
|
|
| 15.11.2012, 23:04 | |
|
Ответы с готовыми решениями:
11
Несколько ошибок при обработке строк Пустая страница при обработке ошибок сервера XNet - получить тело запроса в обработке ошибок |
|
Higher
|
|
| 15.11.2012, 23:27 | |
|
Ваш вопрос не совсем понятен.
Но, мое мнение - стоит избегать throw везде, где это только возможно. Так как ваша функция возвращает void, то вы можете спокойно изменить ее на int и возвращать код ошибки(либо 0, если все прошло успешно). Мне такой подход кажется намного лучшим, чем вариант с исключениями.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.11.2012, 00:04 | |
|
diagon, А аргументы? Сферическая скорость в вакууме? Не так давно читал статейку, где объяснялось, что исключения в С++ не такие уж дорогостоящие.
0
|
|
|
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
|
|
| 16.11.2012, 00:15 [ТС] | |
|
ForEveR, при однократном вычислении, может и не очень. А что насчет БД?
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|||||||||||
| 16.11.2012, 02:20 | |||||||||||
|
Это давний срач: коды возврата vs исключения.
Основное принципиальное отличие: поведение по умолчанию (если не писать дополнительного кода). Коды возврата по умолчанию игнорируются, исключения по умолчанию пробрасываются дальше. Детектор: если вы пишете кодами возврата и у вас довольно часто встречается что-то вида
И наоборот, если у вас большая часть "опасных" мест завёрнута в try-блоки и в основном исключения не перебрасываются наверх или тупо игнорируется, то подумайте над переходом к кодам возврата. Сферическая скорость в вакууме исключений — я думаю, не медленее if (err) { return err; }. Пробежаться по стеку при пробросе наверх в любом случае придётся. Ну и помните: исключения для исключительных ситуаций. Не для штатных и ожидаемых ошибок, а для чего-то, что ставит под угрозу всю дальнейшую работу, так что скорость их работы не является критичной. Добавлено через 47 минут Проверил на тупом синтетическом примере Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
|
||||
| 16.11.2012, 04:59 | ||||
|
2автор, вызов возвращает значение (если ты не знал), это значение надо проверить на ошибки. Как-то так по существу. О с++ забудь, это мусор для головы.
0
|
||||
|
Higher
|
||
| 16.11.2012, 08:59 | ||
|
Не зря же в google coding style отказались от них вообще.
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.11.2012, 09:30 | |
|
diagon, Ничего они не затрудняют, если грамотно все делать. Я бы не сказал, что проще жить без исключений, как раз вот коды ошибок постоянно проверять в разы проблемнее. Впринципе OhMyGod все верно сказал.Ну и так, для чтива: http://lazarenko.me/tips-and-t... erformance
0
|
|
|
|
|||
| 16.11.2012, 09:52 | |||
|
Моё мнение, что исключения следует использовать только в тех случаях, когда делается многоуровневый выход (т.е. фактически сворачивается целая ветвь исполнения программы и делается откат).
Например, какой-нибудь парсер от языка программирования, который состоит из большого количества вызовов, в том числе и рекурсивных. Логика парсера построена на разбор корректного текста. При появлении ошибки (которая может быть на 50-м уровне вложенности относительно начала работы) следует выдать диагностическое сообщение и сделать throw, который будет пойман в точке запуска парсера и там парсер завершит работу с ошибкой. В остальных случаях, когда ошибка конкретного вызова обрабатывается в точке вызова, то код становится читаемый и понятный. А когда множество разнородных ошибок пытаются поймать через catch в одном месте, то такое понять намного сложнее. Хотя это тоже будет оправдано, если весь этот ворох ошибок должен приводить к одному и тому же результату: аварийному завершению целой ветви программы Ответ на поставленный ТС'ом вопрос однозначно нельзя дать в принципе. В каждом конкретном случае надо принимать конкретное решение. Доводы про то, что throw-catch работает долго, вообще говоря, не состоятельные, т.к. ошибка - это по сути нештатная работа программы и потеря лишних сотых долей секунды никакой погоды не сделает Добавлено через 1 минуту
0
|
|||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.11.2012, 10:00 | |
|
Evg, Ну почему же что-то пошло не так сразу... Функция перекодировки кода ошибки в сообщение понятное юзеру к примеру.
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|||
| 16.11.2012, 10:25 | |||
|
0
|
|||
|
|
|||
| 16.11.2012, 12:26 | |||
|
Тут проблема в том, что многие понимают ответ на поставленный ТС'ом вопрос, но нормально облачить это в словесную форму очень трудно, особенно чтобы это понимал человек с небольшим опытом работы
1
|
|||
| 16.11.2012, 12:26 | |
|
Помогаю со студенческими работами здесь
12
При обработке ошибок с ExceptionMapper(Jersey), не получаю JSON "Ускорение" программы по обработке ошибок Что это isOk(int s),setAge(int g){if(isOk(g){age=g;return true;}else{.;return false;}}.getName(){return name;}?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|