| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > корректность кода |
| Автор: Cetus 23.3.2005, 21:22 | ||
возник вопрос, является ли код корректным?
если при i=k, (0<k<n) возникнет исключение, то в секции except значение i будет то же самое что и в секции try (в т.ч. при граничных значениях)? На тестах проблем не было, но компилятор делфи ругается, что значение i может быть не определено... |
| Автор: fess 23.3.2005, 22:01 | ||
Не обращай внимания |
| Автор: Marriage 23.3.2005, 22:09 | ||||
Странно, что не было. Я бы сделал так :
Ошибка по идее должна пропасть. |
| Автор: fess 23.3.2005, 23:02 | ||
Почему они должны быть? Ведь значение переменной цикла не может быть измененно внутри цикла (в смысле нельзя сделать i:=5), а сразу после цикла стоит except, следовательно, переменная i не изменяется до попадания в блок исключения. А это предупрежедние как раз говорит о том, что значение i может быть измененно. |
| Автор: Marriage 24.3.2005, 11:06 |
| fess Я имел ввиду не конкретный случай, а общий. Например цикл while |
| Автор: bursa 24.3.2005, 12:41 |
| После выхода из цикла for i ... переменнная i может содержать что угодно. Чаще, конечно, там может быть то, что тебе нужно. Но, будте уверены, будут глюки. А отлавливать такие глюки (то есть ошибка, то нет) дело неблагодарное. Делай как Marriage сказал. |
| Автор: fess 24.3.2005, 13:52 | ||
Почему? |
| Автор: bursa 24.3.2005, 14:09 | ||||
В учебнике по Turbo Pascal прочитал. В году эдак '89.
Это связано с особенностью компилятора. В общем, я никогда и не использовал по сегодняшний день. Может, что-то изменилось? |
| Автор: Marriage 24.3.2005, 15:22 |
| НУжно еще учитывать ВЕЛИКОЛЕПНЫЙ exept. То есть код выполняется при "глючной" ситуации. И никто не знает , что там произошло и повлекло за собой ... Может именно там перезаписалось значение i. |
| Автор: Cetus 24.3.2005, 16:25 |
| bursa , Marriage меня не интересует значение переменной _после_ выхода из цикла, а именно _в цикле_ (в т.ч. на границах) Необходимо для следующего: если при модификации k-го элемента массива (0 <= k <= n) обнаружилоcь, что элемент не соотв условию, то произвести 'обратную модификацию' элементов массива от 0 до k, не трогая элементы с k+1 до n. |
| Автор: Marriage 24.3.2005, 16:50 | ||
| Cetus Что то я не понял .... А почему не сделать так :
Try/exept - это когда проект вовремя сдать надо !!!! |
| Автор: Cetus 25.3.2005, 08:25 |
| Marriage Пишу для MySQL, но там нет механизма транзакций, откатов. На каждую запись свой отдельный SQL запрос, если не выполняется, то делаем откат изменений. Поэтому приходится реализовывать все самому, через try-for-except для многопользовательского режима. |
| Автор: p0s0l 25.3.2005, 12:43 |
| Надёжнее и правильнее запоминать на каждом шаге i в какой-нибудь переменной... Добавлено @ 12:44 Или делать цикл не через for, а чере while |
| Автор: Гость_Cetus 26.3.2005, 12:44 |
| ну и чем же они будут отличаться? |
| Автор: Marriage 26.3.2005, 16:14 | ||
| Гость_Cetus Мой ответ на твой вопрос
Ну а дальше уже тебе решать. |
| Автор: Cetus 27.3.2005, 19:06 |
| спасибо всем откликнувшимся ! |