цикл FOR

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Сообщение Alexander » 15.10.2007 15:05:15

ev писал(а):с логической точки зрения более правильнее отказаться от от do
т.к. begin и end - это границы блока
без них может выполнятся цикл


А я это и предлагаю. Только писать не begin (начать), а do (делать),
компактнее. Или сократить begin до трёх букв - beg. Но это всё мелочи.
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 697
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение ev » 15.10.2007 15:24:11

или заменить begin и end на { и } ?
это ведь еще компактнее ;)
ev
долгожитель
 
Сообщения: 1764
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение bw » 15.10.2007 15:29:52

Или ограничиться отступами для блока, как в Python :-).
Хотя, без дураков, мне нравится подход в Python, он заставляет писать читаемый код :-).

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Bonart » 16.10.2007 14:18:39

bw писал(а):Хотя, без дураков, мне нравится подход в Python, он заставляет писать читаемый код

Еще лучше как в Хаскелле.
Хочешь - пиши в фигурных скобках через точку с запятой
Код: Выделить всё
do { operator1; operator2; operator3 }

Хочешь - с отступами
Код: Выделить всё
do
    operator1
    operator2
    operator3
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение bw » 16.10.2007 14:30:38

Так тоже ничего. Я просто Haskell даже не видел :-). Но мне как-то сподручнее, что ли, фигурные скобки использовать для комментирования или для задания словаря (Python):
Код: Выделить всё
value = {'a': 1, 'b': 2, 'c': 3}
print value['a']  # -> 1
print value['b']  # -> 2
print value['c']  # -> 3
print value[1]    # -> исключение


..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Bonart » 16.10.2007 14:59:00

bw
А Хаскелле отсупами разрешено заменять почти любые перечисления в фигурных скобках через точку с запятой ;)
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение Bonart » 23.10.2007 09:19:56

По зрелом размышлении предлагаю следующие варианты цикла с параметром:
1. С дискретным параметром:
for параметр[:тип] := выражение [down]to конечное_значение [step шаг] do
список_операторов
end
2. C произвольным параметром:
for параметр[:тип] := выражение next выражение while логическое_выражение do
список_операторов
end
3. С итерацией по множеству:
for параметр[:тип] in множество do
список_операторов
end

Что общего у всех вариантов цикла с параметром - параметр локализуется в цикле (его не видно ни до ни после), на каждой итерации в теле цикла является константой. Это позволяет создавать с одной стороны более прозрачный, с другой - лучше оптимизированный код.
Выражение после next используется каждый раз для получения нового значения параметра. В нем можно (и обычно нужно) использовать его значение на предыдущей итерации.
Например, for i:integer:=1 next i+1 while i<10 do write i; end
Цикл с итерацией по множеству хорош для обслуживания разнообразных коллекций, а также для оптимизаций, связанных с порядком итераций - в этом варианте он неопределен.
Цикл с дискретным параметром отличается лаконизмом, прозрачностью и хорошими возможностями для оптимизации.

По опыту Ады do уже является открывающей операторной скобкой.
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение bw » 23.10.2007 10:24:35

> По опыту Ады do уже является открывающей операторной скобкой.
А если нужен только один оператор в теле цикла (как в последнем примере), то "end" все равно придется ставить?

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Bonart » 23.10.2007 11:16:32

bw писал(а):А если нужен только один оператор в теле цикла (как в последнем примере), то "end" все равно придется ставить?

Нет!
Почему смотри здесь http://freepascal.ru/forum/viewtopic.php?t=2808
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение ev » 23.10.2007 11:42:14

А если нужен только один оператор в теле цикла (как в последнем примере), то "end" все равно придется ставить?

можно do убрать например
ev
долгожитель
 
Сообщения: 1764
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Пред.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru