crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Исключения. За и против
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  


Цитата(Tonal @ 23.9.2009, 8:54) *
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  


Цитата(BRE @ 23.9.2009, 8:18) *
На мой взгляд, ключевая фраза там:

Нет. Не эта фраза там ключевая. И не одна она там. Перечислены они в cons. И всё там по делу написано. Трудно отследить управляющую логику программы, так как она будет смешана с обработкой ошибок. И как ты (ничего, что я на "ты"?) уже правильно заметил, об исключениях слишком много надо знать.

Цитата(BRE @ 23.9.2009, 8:18) *
Для эффективного и безопасного использования исключений нужно один раз разобраться с их тонкостями и хорошо продумывать кто, где и как исключение может послать и кто/где/как эти исключения будет обрабатывать. Книг много, начиная с Страуструпа.
Книг много, да времени мало.

Цитата(BRE @ 23.9.2009, 8:18) *
* Исключение в конструкторе. Сразу дает понять, что объект не может быть сконструирован. Нет нужды вводить флаги valid для объектов и проверять их во всех местах и не нужно вводить новые методы типа bool init(), которые по сути замещают конструктор и делают конструирование объекта двух-этапным.

Конструкторы, судя по всему, вообще зло. Надо бы фабрики классов использовать... Но для этого надо читать... Много читать. Сам никак не начну GoF.

Цитата(BRE @ 23.9.2009, 8:18) *
* Проверка результата работы функции. Нет необходимости после каждой функции вставлять проверку результата ее работы, что только затрудняет чтение и делает множество точек выхода из функции по ошибке.

А какая разница? Нет необходимости проверять результат работы функции, но есть необходимость обрабатывать исключения, сгенерированные в процессе её работы.

И да, самое главное, что в Qt исключения практически не используются. А мешать error codes и exceptions в коде - ещё хуже, чем использовать что-то одно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rnd
  опции профиля:
сообщение 23.9.2009, 10:23
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 54
Регистрация: 22.7.2009
Пользователь №: 930

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(kemiisto @ 23.9.2009, 11:16) *
Трудно отследить управляющую логику программы, так как она будет смешана с обработкой ошибок.


Как раз наоборот, при использовании исключений логика программы и обработка ошибок, будут четко разделены.
При использовании кодов после каждой функции неизбежно появление 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  


Цитата(SABROG @ 23.9.2009, 11:50) *
Еще 3 вещи, которые относятся к исключениям:
- возможное замедление работы программы
- увеличенное потребление памяти
- увеличение размера собранной программы

Во времена, когда только появился C++, приверженцы C, выдвигали те-же аргументы на счет программ написанных на С++. ;) :)
- косвенные вызовы виртуальных методов (замедление работы программы)
- таблицы виртуальных методов (увеличивается размер программы и потребление памяти)

Ну как показало время, эти проблемы не такие уж и фатальные. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 9:28