jako poměrně zkušený programátor bych takovéto využívání zkráceného vyhodnocování booleoovských výrazů vůbec nedoporučoval...
viz příklad z textu:
if (MessageDlg('Chcete opravdu skoncit? ', mtConfirmation, [mbYes, mbNo], 0) = mrYes)
and (MessageDlg('Je aktualni soubor ulozen? ', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
z podmínky není na první podled patrné, že se druhé volání messageboxu nevykoná když uživatel vybere 'No'.
je to tedy mnohem lepši zapsat jako:
if (MessageDlg('Chcete opravdu skoncit? ', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
if (MessageDlg('Je aktualni soubor ulozen? ', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
V případě, že by šlo o nějaký složitější výraz a volané funkce by měly vedlejší efekt tak je celkem dobře možné že v zápisu uděláte chybu ... a požadované vedlejší efekty za určitých podmínek neproběhnou
takovéto chyby se potom velice špatně hledají
rozumné je toto využít například při kontrole indexu pole:
const vel = 20;
var
pole = array[0..vel] of integer;
begin
size := vel;
i := 0;
while ((i hledana_hodnota)) do
i:= i + 1;
zde je šikovné, že máte zajištěno, že se nebudete odkazovat na políčko, které v poli není a nemusíte tuto podmínku zapisovat jako while + if
teď nevím, jestli je to v článku napsané, ale norma pascalu nenařizuje, aby překladače vyhodnocovaly výrazy zkráceně... čož znamená, že se na to ani nemůžete spolehnout bez toho aby jste nějak nastavovali parametry překladu