Euforia - ocena zwarcia
Gdy warunek jest testowany przez if, elsif, untillub while za pomocą and lub oroperatorów, stosowana jest ocena zwarcia. Na przykład -
if a < 0 and b > 0 then
-- block of code
end if
Jeśli a <0 jest fałszem, to Euforia nie zawraca sobie głowy sprawdzaniem, czy b jest większe od 0. Wie, że ogólny wynik jest fałszywy, niezależnie od tego. Podobnie -
if a < 0 or b > 0 then
-- block of code
end if
jeśli a <0 jest prawdziwe, to Euforia natychmiast decyduje, że wynik jest prawdziwy, bez sprawdzania wartości b, ponieważ wynik tego testu jest nieistotny.
Ogólnie rzecz biorąc, ilekroć masz stan w następującej formie -
A and B
Tam, gdzie A i B mogą być dowolnymi dwoma wyrażeniami, Euphoria idzie na skróty, gdy A jest fałszywe i natychmiast sprawia, że ogólny wynik jest fałszywy, nawet nie patrząc na wyrażenie B.
Podobnie, jeśli masz warunek w następującej formie -
A or B
Tam, gdzie A jest prawdziwe, Euphoria pomija ocenę wyrażenia B i deklaruje, że wynik jest prawdziwy.
Short-circuitocena i i lub ma miejsce tylko dla warunków if, elsif, till i while. Nie jest używany w innych kontekstach. Na przykład -
x = 1 or {1,2,3,4,5} -- x should be set to {1,1,1,1,1}
Gdyby zastosowano tutaj zwarcie, ustawiłbyś x na 1, a nawet nie patrzyłbyś na {1, 2, 3, 4, 5}, co byłoby błędne.
Tak więc zwarcie może być używane w warunkach if, elsif, before lub while, ponieważ musisz tylko dbać o to, czy wynik jest prawdziwy, czy fałszywy, a do wytworzenia atomu w wyniku wymagane są warunki.