Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

if или case


Страницы:   1 2 3

начинающий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]

тогда ты не нужен, если будет работать программист.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо