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