![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
if или case
начинающий2 © (2011-07-13 14:04:00)функция возвращает один из трех возможный результатов. нужно написать обработчик результата функции. так возможных результатов только 3 что разумнее всего использовать if или case
Dennis I. Komarov (2011-07-14 17:26:00) [21]
> то что он знал, что если тут такая цифра а тут такая, то
> тут должна быть такая
> Это правила предметной области, он тут спец.
Что-то там не заметно, что он генерировал собственные исключения...
SQLEXPRESS (2011-07-14 16:34:00) [22]
> что не каждый бы не смог.
прямо по Фрейду :)
следует читать: * не каждый бы смог такое на алгоритм положить
SQLEXPRESS (2011-07-14 16:32:00) [23]
> sniknik © (14.07.11 16:06) [34]
не, я имел ввиду немного другое
то что он знал, что если тут такая цифра а тут такая, то тут должна быть такая
Это правила предметной области, он тут спец.
т.е. он формализовал и алгоритмизировал то, что не каждый бы не смог.
А вот как это реализовал - да :)
это оставляет желать лучшего
sniknik (2011-07-14 16:11:00) [24]> "книжное" "рубление" это немного не то
можно прочитать кучу книг, и даже все, что там есть хорошо выучить, знать, но не использовать в работе... просто потому что не сталкивался/не воспринимаешь всерьез последствия.
Rouse_ (2011-07-14 16:07:00) [25]
> Игорь Шевченко © (14.07.11 11:37) [30]
> Для несогласных дана ссылка на статью, читайте и воздастся
Для несогласных есть QualityCentral где ты совершенно спокойно можешь отписаться о багах в коде VCL и прикрепить линк на статью :)
sniknik (2011-07-14 16:06:00) [26]> Человек, писавший ее, безусловно, рубил в предмете
да ламер он, тот кто "рубит", имеет опыт ("книжное" "рубление" это немного не то) никогда так не напишет.
Игорь Шевченко (2011-07-14 13:28:00) [27]Dennis I. Komarov © (14.07.11 12:06) [31]
> Не конструктивно, слишком много букв...
Статья полезная, претензии по объему - к автору. Суть в статье.
SQLEXPRESS (2011-07-14 12:50:00) [28]
> А вот нету даже TApplication :P
Джедаи помогут :)
(даже с № строки и текстом оператора ошибку покажут)
> З.Ы. Так стоило быть на столько категоричним???
Наверное, нет :)
> Я ниразу не ЗА, чтоб ошибки прятали за своим "красивым"
> текстом...
да это понятно..
я, напрмер, устал гадать.
как же надоело подключаться к юзерам и видеть надпись "Ошибка! Обратитесь разработчику"
Человек, писавший ее, безусловно, рубил в предмете, но как же напрягает после часового просмотра трейса всяких xxxMonitir от SysInternals, обнаружить, что она пробует в монопольном режиме открыть файл,
или писать в порт,
обламывается и вот так вот говорит об этом.
Dennis I. Komarov (2011-07-14 12:06:00) [29]
> Дэн, читай все. Стрелять за
А я про [9] и только. Ибо к коду [3] и т.п. не имею никакого...
> Вот. Куда - решит тот, кто использует.
> Если это гуй - то на форму, если нет, то породит что-то
> в реал-тайме и привяжет.
> Используя чужой код, ожидаешь от него реальную ошибку. А
> что с ней делать - решает обработчик выше.
> Если это твой обработчик(для себя пишешь), пишешь в лог.
>
А вот нету даже TApplication :P
З.Ы. Так стоило быть на столько категоричним???
> Игорь Шевченко © (14.07.11 11:37) [30]
Не конструктивно, слишком много букв... Суть где?
З.Ы.Ы.
Я ниразу не ЗА, чтоб ошибки прятали за своим "красивым" текстом...
Игорь Шевченко (2011-07-14 11:37:00) [30]Rouse_ © (13.07.11 19:15) [24]
Dennis I. Komarov © (14.07.11 08:52) [26]
> НЕ согласен.
Для несогласных дана ссылка на статью, читайте и воздастся
SQLEXPRESS (2011-07-14 11:25:00) [31]
> Не надо передергивать. Вопрос был за что к стенке при:
> except
> on E: Exception do begin?
Дэн, читай все. Стрелять за
except
on E: Exception do
begin
ToLog(E);
ToBuffer(E);
ToXXX(E);
end;
без перевозбуждения если. :)
> а не лазить по всему тексту, вставляя Raise везде, где спрятал
> Все что спрятал отправил в лог...
Твой код используют, он проглотил ошибку.
Пока еще разберутся, куда он что логгирует, проклянут 3 раза.
> > просто добавляем ApplicationEvents,
> Куда?
Вот. Куда - решит тот, кто использует.
Если это гуй - то на форму, если нет, то породит что-то в реал-тайме и привяжет.
Используя чужой код, ожидаешь от него реальную ошибку. А что с ней делать - решает обработчик выше.
Если это твой обработчик(для себя пишешь), пишешь в лог.
т.е.
если надо не стопорить приложение,
то твой обработчик самого последнего, верхнего уровня может писать в лог и гасить ошибку.
но
если его убрать,
то что бы все ошибки остались не обработанными.
А
если ты их неперевозбуждаешь,
то придется по коду лазить.
Вот ты уволился, дай бог в Газпром ушел :), твой код отдали следующему.
Он решил что-то доработать, вызвал твою функцию, она съела ошибку, он гадает, что же там такое.
vs
он отменил твой обработчик верхний, и сам получает все ошибки.
Что с ними делать - сам решает.
и ставит один свой верхний, если их опять надо гасить
Dennis I. Komarov (2011-07-14 10:12:00) [32]
> SQLEXPRESS (14.07.11 09:04) [27]
Не надо передергивать. Вопрос был за что к стенке при:
except?
on E: Exception do begin
> просто добавляем ApplicationEvents,
Куда?
> а не лазить по всему тексту, вставляя Raise везде, где спрятал
Все что спрятал отправил в лог...
SQLEXPRESS (2011-07-14 09:04:00) [33]
> Софт, работает 24/7.
тогда к программе с такими конструкциями
except
on E:Exception do
begin
E.Message := E.Message + #13#10 + ' поэтому думаю, что нельзя переместиться на следующую запись';
raise;
end;
end;
просто добавляем ApplicationEvents, где на onError все пишем в фал
а если потребуется смотреть реальные ошибки,
тогда просто достаточно один метод убрать/обойти, а не лазить по всему тексту, вставляя Raise везде, где спрятал
Dennis I. Komarov (2011-07-14 08:52:00) [34]
> Игорь Шевченко © (13.07.11 15:28) [9]
>
> > except
> > on E: Exception do
> > begin
>
>
> Уже за одно это надо пускать пулю в лоб тремя очередями
НЕ согласен. Софт, работает 24/7. Ну не надо мне видеть (особенно когда некому) исключения на экране, все в лог сваливается. Так за что сразу к стенке?
KilkennyCat (2011-07-14 03:12:00) [35]генофонд уже давно не пример для подражания...
А на мой взгляд, в большинстве случаев, писать надо просто безглючно и удобно, базируясь на имеющихся знаниях (если их достаточно). Процессоры сейчас мощные, винчестеры большие. Заказчик интересуется лишь конечным результатом, за который и платит. Оплата позволяет некоторое время жить. Так что, если влияние на результат пренебрежимо мало, можно вместо цикла копи-пасте забабахать, а уж потом, на полученные средства купить книжку и почитать про циклы. Если же сначала купить книжку и прочитать про циклы, то прибыль меньше.
Rouse_ (2011-07-13 19:15:00) [36]
> Игорь Шевченко © (13.07.11 15:28) [9]
> Уже за одно это надо пускать пулю в лоб тремя очередями
Правильно - и в первую очередь в лоб всем разработчикам VCL, или отказаться от использования оного...
зы: воть на вскидку из генофонда:
except
on E: Exception do
Text := SBCDOverflow;
end;
Юрий Зотов (2011-07-13 16:42:00) [37]> начинающий2 (13.07.11 14:04)
> что разумнее всего использовать if или case
Ни то, ни другое.
1. Делаем такие объявления:
type
TRG = (RG_PRODUCTS, RG_CATEGORIES, ...); // тип результата FRecordsGroup
const
ErrMsg: array[TRG] of string =
(CannotGoToNextProductRecord, CannotGoToNextCategoryRecord, ...);
2. И теперь не нужны ни if, ни case - все стало просто и коротко:
on E: Exception do
begin
Result := -1;
FLastErrorMessage := Format(ErrMsg[FRecordsGroup], [E.Message]);
end;
stas (2011-07-13 16:38:00) [38]начинающий2 (13.07.11 16:15) [19]
ИспользуйCaseи не парься ))
Сергей М. (2011-07-13 16:31:00) [39]
> не просто тетенька, а программист
В смысле что-то бесполое ?)
Медвежонок Пятачок (2011-07-13 16:27:00) [40]тогда ты не нужен, если будет работать программист.