Модератор: перенесено изviewtopic.php?f=7&t=1500

Не совсем про выход из середины цикла, но про выход из середины процедуры. Сегодня переписал вот такую процедурку. Было:## Код:
```
PROCEDURE (pg: Page) Load* (): BOOLEAN;
BEGIN
   IF pg.base.bmh # NIL THEN RETURN TRUE;
   ELSIF ~pg.Load^ () THEN RETURN FALSE;
   ELSIF pg.base.bmh = NIL THEN AllocNew (pg);
   END; (* if *)
   RETURN TRUE;
END Load;
```
Стало:## Код:
```
PROCEDURE (pg: Page) Load* (): BOOLEAN;
VAR res: BOOLEAN;
BEGIN
   res := (pg.base.bmh # NIL) OR pg.Load^ ();
   IF res & (pg.base.bmh = NIL) THEN
      AllocNew (pg);
   END; (* if *)
   RETURN res
END Load;
```
Алгоритмически второй вариант от первого отличается только тем, что в случае (pg.base.bmh # NIL) данная проверка выполнится два раза, а в первом - один раз. Вот ради такой экономии "на спичках" была принесена в жертву понятность. Впрочем, не исключаю, что первый вариант самому автору читать было бы легче, чем второй, тут привычка к определённой манере конструированя алгоритма может оказывать сильное влияние на восприятие.
PS: Проверка "... # NIL" имеет здесь смысл "уже загружено".