|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
ASSERT штука хорошая, но плоха она тем, что работает только в режиме отладки. А ведь ошибки надо ловить и в производственных условиях. Традиция, идущая от программирования в "C", предлагает 1) числовой код для каждой ошибки; 2) классификацию ошибок по рубрикам; 3) фиксированное текстовое сообщение для каждого кода с возможностью вставки "по случаю", вносящей конкретику сбоя. И для всего этого надо держать заголовочные файлы *.H. Эта традиция не учитывает возможностей Фокса и создаёт ненужные препятствия для кодирования проверок в тексте программы. Как правило, если сбой приключился, то код его номера делу не поможет. В минимальном (и достаточном) варианте, всё что требуется написать для проверки на ошибку, это AssertIt ('Условие'). Программа AssertIt() проверит условие, и если оно нарушено, выбросит пользовательское исключение с кодом 2071 со всей необходимой информацией. Ваш перехватчик TRY ... CATCH TO m.Exception_lo ... только должен выбрать информацию из поля m.Exception_lo.UserValue. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 09:39 |
|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, а зачем кросспостить? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 10:05 |
|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
Пожалуй, строка m.Excpt_lo.Message = IIF (EMPTY (m.Msg_lc), '', m.Msg_lc) + m.Cont_lc выглядит излишеством. Сгодится более простое m.Excpt_lo.Message = m.Msg_lc + m.Cont_lc ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 12:52 |
|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
Это все к чему и кому Вы рассказываете? или это беседа самого с собой ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 18:41 |
|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
Вот это промашка! Вычисление EVALUATE () в AssertIt() не сработает, если в него входят переменные, описанные в вызывающей программе как LOCAL. Так что для спасения идеи придётся воспользоваться не столь изящной реализацией, выполняя проверку условия прямо в программе, где описаны переменные. Но всё равно, Фокс несравненнен! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2013, 22:58 |
|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
А вот это инерция мышления! В первой версии по необходимости было использовано EVALUATE(). И по инерции, некритически, перенесено во вторую версию, где оно совершенно излишне. Более разумная реализация должна выглядеть вот как. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2013, 11:07 |
|
ASSERT всегда, не только под DEBUG - совет для ленивых
|
|||
---|---|---|---|
#18+
pivaЭто все к чему и кому Вы рассказываете? или это беседа самого с собой ? Есть подозрение что персональный блог был спутан с форумом... На SQL.RU есть специальное место для блогов и статей... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2013, 11:55 |
|
|
start [/forum/topic.php?desktop=1&fid=41&tid=1583054]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 411ms |
0 / 0 |