Текущий архив: 2009.06.07;
Скачать: CL | DM;
ВнизПорядок условий в конструкции if Найти похожие ветки
← →
Nucer (2009-04-22 11:30) [0]Можно ли писать вот так?
var
s:string;
begin
...
if (length(s)>0) and (s[1]="") then ...;
end;
Или же обязательно так:var
s:string;
begin
...
if (length(s)>0) then if (s[1]="") then ...;
end;
Может ли в первом случае быть выполнена вторая проверка? Просто как-то давно читал, что условия проверяются не слева направо, а в случайном порядке (точнее порядок зависит от воли компилятора).
← →
Лёша (2009-04-22 11:34) [1]В Паскале: если первая часть из and - False, вторая не проверяется.
В SQL по разному.
← →
sniknik © (2009-04-22 11:34) [2]от настроек компиляции зависит. второй способ будет рабочим при любых.
← →
AndreyV © (2009-04-22 11:35) [3]> [0] Nucer (22.04.09 11:30)
> Просто как-то давно читал, что условия проверяются не слева
> направо, а в случайном порядке (точнее порядок зависит от
> воли компилятора).
Это в Си слева направо с досрочным завершением.
← →
Сергей М. © (2009-04-22 11:35) [4]
> В Паскале: если первая часть из and - False, вторая не проверяется
Это с какого же перепугу ?
← →
Anatoly Podgoretsky © (2009-04-22 11:37) [5]В общем случае случае второй вариант отработае во всех случаях, а первый вариант может дать AV, зависит от настроек компилятора.
← →
Nucer (2009-04-22 11:43) [6]Благодарю за ответы.
← →
Лёша (2009-04-22 12:52) [7]Сергей М. © (22.04.09 11:35) [4]
>
> > В Паскале: если первая часть из and - False, вторая не
> проверяется
>
>
> Это с какого же перепугу ?
Вывел эксперементальным путем.function TestTrue: boolean;
begin
Result := True;
ShowMessage("Run");
end;
function TestFalse: boolean;
begin
Result := False;
end;
begin
if TestFalse and TestTrue then
ShowMessage("Not Run");
end;
Не знал, что это можно заставить работать по разному в насторйках компилятора.
Кстати, где это выставляется?
← →
palva © (2009-04-22 12:56) [8]
> Кстати, где это выставляется?
Это смотря какой компилятор.
← →
Лёша (2009-04-22 13:01) [9]Тот, что с D2007.
← →
Юрий Зотов © (2009-04-22 13:41) [10]> Лёша
Посмотрите справку по опции компилятора $B, там все написано.1. if условие1 AND условие2 then...
Вычисляется условие1. Если условие1=true, то условие2 тоже будет вычисляться. Но если условие1=false, то условие2 может вычисляться (хотя результат всего выражения уже и без того ясен), а может и не вычисляться - это зависит от действующей в данном месте кода опции $B.2. if условие1 THEN if условие2 then...
Вычисляется условие1. Если условие1=true, то условие2 тоже будет вычисляться. Но если условие1=false, то условие2 вычисляться не будет, независимо ни от каких опций.3. if условие1 OR условие2 then...
Вычисляется условие1. Если условие1=false, то условие2 тоже будет вычисляться. Но если условие1=true, то условие2 может вычисляться (хотя результат всего выражения уже и без того ясен), а может и не вычисляться - это зависит от действующей в данном месте кода опции $B.4. if условие1 XOR условие2 then...
Оба условия будут вычисляться всегда, независимо ни от каких опций.
Страницы: 1 вся ветка
Текущий архив: 2009.06.07;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.003 c