Исключения. За и против |
Здравствуйте, гость ( Вход | Регистрация )
Исключения. За и против |
SABROG |
22.9.2009, 22:40
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Сама библиотека Qt практически не использует исключения за исключением QtXmlPatterns и QtConcurrent, но никто не запрещает использовать их в твоей программе. Но я думаю будет полезным ознакомится с общим, не хорошим, мнением об исключениях.
|
|
|
Tonal |
23.9.2009, 7:54
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
2 SABROG Может опишешь это "общее мнение"?
А то не понятно о чём ты... |
|
|
SABROG |
23.9.2009, 8:28
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
2 SABROG Может опишешь это "общее мнение"? А то не понятно о чём ты... http://google-styleguide.googlecode.com/sv....xml#Exceptions |
|
|
kwisp |
23.9.2009, 8:49
Сообщение
#4
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
SABROG,
полезная ссылка(Google C++ Style Guide). ознакомится с мнением экспертов неплохо Сообщение отредактировал kwisp - 23.9.2009, 8:50 |
|
|
BRE |
23.9.2009, 9:18
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
На мой взгляд, ключевая фраза там:
Цитата Because most existing C++ code at Google is not prepared to deal with exceptions, it is comparatively difficult to adopt new code that generates exceptions. На сколько я понял эту фразу переведенную электронным переводчиком, основная масса Гугловского кода не заточена для работы с исключениями, поэтому они не рекомендуют их использовать. Но это проблемы самого Гугла. Исключения - штатное средство C++ и ограничивать себя в их использовании, IMHO, это шагать назад. Опять же IMHO, исключения позволяют улучить читабельность исходного кода и позволяют генерировать более оптимальный код. Примеры: * Исключение в конструкторе. Сразу дает понять, что объект не может быть сконструирован. Нет нужды вводить флаги valid для объектов и проверять их во всех местах и не нужно вводить новые методы типа bool init(), которые по сути замещают конструктор и делают конструирование объекта двух-этапным. * Проверка результата работы функции. Нет необходимости после каждой функции вставлять проверку результата ее работы, что только затрудняет чтение и делает множество точек выхода из функции по ошибке. Для эффективного и безопасного использования исключений нужно один раз разобраться с их тонкостями и хорошо продумывать кто, где и как исключение может послать и кто/где/как эти исключения будет обрабатывать. Книг много, начиная с Страуструпа. По поводу исключений в Qt. Как мне кажется отсутствие исключений в Qt это вопрос больше исторический. В те времена когда началась разработка Qt на некоторых платформах были проблемы при использовании исключений (о чем они и пишут), поэтому ребята решили отказаться от их использования для возможности использовать Qt на большем числе платформ. Сейчас ситуация изменилась, не знаю остались ли еще такие платформы. Поэтому, отказывать себе в использовании этого (несомненно эффективного) механизма, по моему не стоит. |
|
|
kemiisto |
23.9.2009, 10:16
Сообщение
#6
|
Студент Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: 0 |
На мой взгляд, ключевая фраза там: Нет. Не эта фраза там ключевая. И не одна она там. Перечислены они в cons. И всё там по делу написано. Трудно отследить управляющую логику программы, так как она будет смешана с обработкой ошибок. И как ты (ничего, что я на "ты"?) уже правильно заметил, об исключениях слишком много надо знать. Для эффективного и безопасного использования исключений нужно один раз разобраться с их тонкостями и хорошо продумывать кто, где и как исключение может послать и кто/где/как эти исключения будет обрабатывать. Книг много, начиная с Страуструпа. Книг много, да времени мало.* Исключение в конструкторе. Сразу дает понять, что объект не может быть сконструирован. Нет нужды вводить флаги valid для объектов и проверять их во всех местах и не нужно вводить новые методы типа bool init(), которые по сути замещают конструктор и делают конструирование объекта двух-этапным. Конструкторы, судя по всему, вообще зло. Надо бы фабрики классов использовать... Но для этого надо читать... Много читать. Сам никак не начну GoF. * Проверка результата работы функции. Нет необходимости после каждой функции вставлять проверку результата ее работы, что только затрудняет чтение и делает множество точек выхода из функции по ошибке. А какая разница? Нет необходимости проверять результат работы функции, но есть необходимость обрабатывать исключения, сгенерированные в процессе её работы. И да, самое главное, что в Qt исключения практически не используются. А мешать error codes и exceptions в коде - ещё хуже, чем использовать что-то одно. |
|
|
rnd |
23.9.2009, 10:23
Сообщение
#7
|
Студент Группа: Участник Сообщений: 54 Регистрация: 22.7.2009 Пользователь №: 930 Спасибо сказали: 1 раз(а) Репутация: 0 |
Трудно отследить управляющую логику программы, так как она будет смешана с обработкой ошибок. Как раз наоборот, при использовании исключений логика программы и обработка ошибок, будут четко разделены. При использовании кодов после каждой функции неизбежно появление if |
|
|
SABROG |
23.9.2009, 10:50
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Еще 3 вещи, которые относятся к исключениям:
- возможное замедление работы программы - увеличенное потребление памяти - увеличение размера собранной программы |
|
|
rnd |
23.9.2009, 11:09
Сообщение
#9
|
Студент Группа: Участник Сообщений: 54 Регистрация: 22.7.2009 Пользователь №: 930 Спасибо сказали: 1 раз(а) Репутация: 0 |
SABROG,
для большинства программ - это слезы а вот то, что программы с исключениями требуют более высокой культуры написания кода - это факт кстати, если вы используете raii (современный с++), то без исключений уже никак |
|
|
BRE |
23.9.2009, 11:15
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Еще 3 вещи, которые относятся к исключениям: - возможное замедление работы программы - увеличенное потребление памяти - увеличение размера собранной программы Во времена, когда только появился C++, приверженцы C, выдвигали те-же аргументы на счет программ написанных на С++. - косвенные вызовы виртуальных методов (замедление работы программы) - таблицы виртуальных методов (увеличивается размер программы и потребление памяти) Ну как показало время, эти проблемы не такие уж и фатальные. |
|
|
Текстовая версия | Сейчас: 30.11.2024, 9:28 |