Re: and then и or else

От: Oleg Shumsky <CGatePro_at_mx_ru>
Дата: Mon 23 Oct 2006 - 11:41:08 MSD

Здравствуйте.

Alexey Naidyonov wrote:

>On Mon, 2006-10-23 at 10:57 +0400, Oleg Shumsky wrote:
>
>
>
>>Уважаемые гуру, объясните пожалуйста русским языком логику работы
>>конструкций с использованием and then и or else.
>>
>>
>
>Да там все предельно просто: and и or всегда вычисляют оба предиката,
>and then и or else вычисляют правый предикат только при необходимости.
>
>

А зачем в случае and вычислять оба предиката, если первый не соответствует условию? Тоже самое и с or, зачем вычислять второй, если первый соответствует условию? Хотя, это уже вопрос не к вам конкретно.

>> if IsDictionary(input) and input.what == "stop" then syslog("blabla");
>>stop; end if;
>>
>>
>
>Вот если в CG/PL написать так, то получится ошибка -- потому что
>вычислить второй предикат не получится, это не словарь. Я подозреваю,
>что на самом деле Ваш вопрос звучит так: "Почему операторам and и or
>нельзя было назначить обычную сишную семантику?". Я не буду отвечать за
>авторов, но замечу, что оператор с вычислением обоих предикатов тоже
>бывает полезен, хотя, при желании, может сильно запутать логику кода для
>невнимательного читателя.
>
>

Ну в общем-то да :) Сишный вариант как-то более понятен. Если учесть еще, что в cg/pl нужно еще помнить, где какой оператор в каком случае возвращает null, а в каком нет, то мозг расплавляется :)

>Кстати, никто не заставляет писать "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".
>
>

вот наверное так и поступлю. Спасибо.

-- 
Oleg V. Shumsky
Corbina Telecom NOC, VoIP Dept. Ph.: +7 495 7284000, ext. 2174, ICQ: 110474048
Получено Mon Oct 23 07:41:10 2006

Этот архив был сгенерирован hypermail 2.1.8 : Mon 23 Oct 2006 - 12:13:24 MSD