Страница 2 из 2

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


А я это и предлагаю. Только писать не begin (начать), а do (делать),
компактнее. Или сократить begin до трёх букв - beg. Но это всё мелочи.

Добавлено: 15.10.2007 15:24:11
ev
или заменить begin и end на { и } ?
это ведь еще компактнее ;)

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

..bw

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

Еще лучше как в Хаскелле.
Хочешь - пиши в фигурных скобках через точку с запятой

Код: Выделить всё

 do { operator1; operator2; operator3 } 

Хочешь - с отступами

Код: Выделить всё

do
    operator1
    operator2
    operator3

Добавлено: 16.10.2007 14:30:38
bw
Так тоже ничего. Я просто 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

Добавлено: 16.10.2007 14:59:00
Bonart
bw
А Хаскелле отсупами разрешено заменять почти любые перечисления в фигурных скобках через точку с запятой ;)

Добавлено: 23.10.2007 09:19:56
Bonart
По зрелом размышлении предлагаю следующие варианты цикла с параметром:
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 уже является открывающей операторной скобкой.

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

..bw

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

Нет!
Почему смотри здесь http://freepascal.ru/forum/viewtopic.php?t=2808

Добавлено: 23.10.2007 11:42:14
ev
А если нужен только один оператор в теле цикла (как в последнем примере), то "end" все равно придется ставить?

можно do убрать например