Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2010, 21:21   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию А стоит ли распинаться в коде?

Пишу код. И ВНЕЗАПНО приходит мысль - а стоит ли вообще расписывать все проверки\ошибки etc.? В данный момент код вида:
Код:
Else
    Begin
     Compress := 'ERROR C2.2: TOO SMALL FILE - INFO HEADER NOT FOUND';
     DF := FALSE;
    End;
   If (DF) And (BFH.bfType <> $4D42) Then
    Begin
     Compress := 'ERROR C3: NOT BMP FILE';
     DF := FALSE;
    End;
   If (DF) And (BFH.bfSize <> FileSize(F)) Then
    Begin
     Compress := 'ERROR C4.1: BROKEN STRUCTURE - WRONG FILE SIZE';
     DF := FALSE;
    End;
   If (DF) And (BFH.bfReserved = 0) Then
    Begin
     Compress := 'ERROR C4.2: BROKEN STRUCTURE - RESERVED BLOCK HAS WRONG VALUE';
     DF := FALSE;
    End;
ну в общем таких блоков over9000. Так стоит ли ставить все эти проверки? Или оставить все "наголо"? Вылетит так вылетит, подсунут файл неправильный - fаil программы - ну дык на зеркало неча пенять, коли рожа крива.
P.S. Это dll, есть шанс, что попадет в общий доступ без сорса.

P.P.S. Тема не относится к разделу Delphi, поскольку обсуждается не код, а сам тип программирования.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 16.02.2010, 21:23   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Цитата:
Compress := 'ERROR C4.2: BROKEN STRUCTURE - RESERVED BLOCK HAS WRONG VALUE';
А не проще ли оформить процедуру и передавать ей только номер?
Цитата:
А если подумать над самой сутью вопроса?
Это сложно, ибо не известно:
1)На сколько часто будут возникать ошибки
2)Какие их последствия
3)Распространненость программы и ее конечные пользователи.
Все эти параметры нужно взвесить.

Но, имхо, все же стоит.

Последний раз редактировалось Levsha100; 16.02.2010 в 21:31.
Levsha100 вне форума Ответить с цитированием
Старый 16.02.2010, 21:27   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
А не проще ли оформить процедуру и передавать ей только номер?
А какая разница, что вернет функция? Integer или ShortString? Так хоть понятней будет.

P.S. А если подумать над самой сутью вопроса?

Цитата:
1)На сколько часто будут возникать ошибки
Подсунут неправильный файл или битый - будут. Иначе - не должны.
Цитата:
2)Какие их последствия
Ну какие обычно последствия при том, что функция ВДРУГ не работает?
Цитата:
3)Распространненость программы и ее конечные пользователи.
DLL с функциями архивации bmp файлов. Насчет конечного пользоателя - цепь: я - программисты - пользователи.
А вот насчет распространенности не знаю. Допишу, а там посмотрим...
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 16.02.2010 в 21:35.
Alex Cones вне форума Ответить с цитированием
Старый 16.02.2010, 21:35   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

как вариант выдавать код ошибки... а по ним отдельный мануальчик, потом.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.02.2010, 21:37   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
как вариант выдавать код ошибки... а по ним отдельный мануальчик, потом.
Т.е. я так понимаю это голос "за"? А вот насчет кода ошибки -я подумаю над этим. Хотя при передачи 255 байт вроде не должно быть проблем. Хотя... Ладно, буду передавать BYTE, а рядом положу мануал.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 16.02.2010, 22:39   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Странный код. Проще сделать отдельно функцию, генерирующую код ошибки, а далее, список стринговых констант - описание ошибок по коду.
И не придётся 100 раз писать одно и тоже:
Код:
    Begin
     Compress := '...';
     DF := FALSE;
    End;
Arigato вне форума Ответить с цитированием
Старый 16.02.2010, 22:47   #7
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

Не знаю как в делфи, но в Java система исключений позволяет обработать практически любые ошибки, даже без знания того что это вообще была за ошибка, но при этом сохраняя возможность залогировать ошибку.
Тем самым для самых распространенных возможных ошибок писать индивидуальные обработчики, а для остальных - универсальные.
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 16.02.2010, 23:08   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Алекс, считаю что нужно, ибо всетаки нужно ошибки обработать...а не надеятся на авось...
кстати Byte бесмысленно, лучше уж Integer(LongInt для стабильности) ибо один фиг регистр eax идет...а при byte просто его часть(al скорее всего)
так что проверять и проверять
разве что можно оптимизировать код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.02.2010, 23:12   #9
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Тема видимо о защите от дурака? Смотря с чем работаете. Лучше конечно сделать в DLL безопасные и небезопасные функции, вторые быстрее будут работать на пару сотен тактов(конечно это зависит от конкретной платформы итд и от количество обработчиков ошибок).
Таким образом предоставите пользователям выбор каким путем пойти.
А что касается программы то опять же смотря что является объектом и кто будет управлять этим объектом - программист(в случае с вашей ДЛЛ) или пользователь. Допустим если вы пишите сервисный драйвер(не устройства) - стоит позаботится о обоих видах функций. В вашем случае можно обойтись небезопасными функциями так как оперировать объектом будет программист. В случае если что то пишется для пользователей - лучше использовать безопасные функции, т.к. это все же пользователи. Я так же считаю что нельзя лишать программистов права на использование небезопасных функций при условии что объектом является нечто, сильно-зависимое от производительности вашего кода.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 16.02.2010, 23:19   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Мне бы не понравился, например, антивирус, который вылетает с ошибкой типа "Cannot create socket" при отключенном интернете, пытаясь обновить базы с сайта.
Необработанные исключения в общем случае легко приводят к краху всей программы. Причем программа не обязательно "умрёт", а просто будет непонятно как работать. Если Вас это не пугает, то не заморачивайтесь на счет этого.
А если уж решите так оставить, то не забывайте в своём коде ловить чужие исключения, чтобы программа не рухнула в непонятном месте, а функция как и полагается вернула код/текст ошибки. Функции с таким способом оповещения об ошибках должны гарантировать, что из них исключения не вывалятся, а иначе во всём этом нет смысла.
Так же если будет таки переход на систему исключений, то так же нужно и внутри своих функций ловить исключения. Каждая функция должна возвращать фиксированный набор исключений, а не так, что сейчас мы внутри этой функции используем библиотеку №1, которая может выбросить такие то исключения, а завтра перешли на библиотеку №2 и бросаемся совсем другими исключениями. Опять же, не пойманное исключение - потенциальная опасность нарушения работоспособности программы и утечек памяти.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SAPE! Стоит ли? Web-Gangsta Свободное общение 15 15.01.2010 01:23
Стоит ли переходить с D7 на D9? Alex Cones Софт 12 18.09.2009 10:52
Стоит ли начинать с С++ V.I.P Свободное общение 7 20.02.2009 07:34
Стоит ли изучать С#? Игорь007 Свободное общение 30 20.06.2008 14:08