Re: and then п╦ or else

От: Alexey Naidyonov <CGatePro_at_mx_ru>
Дата: Mon 23 Oct 2006 - 11:17:19 MSD

On Mon, 2006-10-23 at 10:57 +0400, Oleg Shumsky wrote:

> Уважаемые гуру, объясните пожалуйста русским языком логику работы
> конструкций с использованием and then и or else.

Да там все предельно просто: and и or всегда вычисляют оба предиката, and then и or else вычисляют правый предикат только при необходимости.

> К примеру, как работает это условие ?
>
> if phoneNumber == null or else phoneNumber == "" then
> phoneNumber = EmailUserPart(SIPURIToEmail(LocalURI()));
> end
> if;
>
>
> И вот это ?
>
> if IsDictionary(input) and then input.what == "stop" then
> syslog("blabla"); stop; end if;
>
> Почему нельзя было использовать более вменяемую и легко читаемую
> конструкцию ??
>
> if IsDictionary(input) and input.what == "stop" then syslog("blabla");
> stop; end if;

Вот если в CG/PL написать так, то получится ошибка -- потому что вычислить второй предикат не получится, это не словарь. Я подозреваю, что на самом деле Ваш вопрос звучит так: "Почему операторам and и or нельзя было назначить обычную сишную семантику?". Я не буду отвечать за авторов, но замечу, что оператор с вычислением обоих предикатов тоже бывает полезен, хотя, при желании, может сильно запутать логику кода для невнимательного читателя.

Кстати, никто не заставляет писать "and then" и "or else": "The && sign can be used instead of the and then keywords. ... The || sign can be used instead of the or else keywords."

Пишите if IsDictionary(input) && input.what == "stop" -- и получите знакомый оператор со знакомой семантикой "как в C".

SY,
--
 Alexey Naidyonov
 ITooLabs Получено Mon Oct 23 07:18:03 2006

Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:15:09 MSK