![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблемы с IF [D7, WinXP]
Dush © (2007-04-14 11:08:00)Доброго времени суток!
возникла проблема: в условии
if (data1=data2) and (Time1<=Time2) then DoIt;
если верно первое условие то второе не проверяется. Как от этого избавится?
Я знаю что можно сделать так:
if (data1=data2) then
if (Time1<=Time2) then DoIt;
а по другому?
Германн (2007-04-17 01:06:00) [1]
> Asail (16.04.07 23:29) [30]
>
> Вот конкретный пример, демонстрирующий проблему.
> 1) {$B-} При падении в Query1 - Query2 и Query3 даже не
> попытаются выполниться
Факт падения в Query1 очевидно должен рассматриваться как сбой программы, после которого результат дальнейшей работы непредсказуем. Зачем же тогда обязательновыполнять Query2 и Query3?
P.S.
Имхо. Единственно кто бы мог привести реальный пример необходимости Complete boolean evaluation, это "железячник", вроде меня. А у меня Вот ну никогда не возникала у меня необходимость использовать Complete boolean evaluation!
Имею мнение, хрен оспоришь :)
homm (2007-04-17 00:37:00) [2]> Это пример того, как НЕ надо делать :)
А ежели так? :)
{$B+}
function A(Qry: TQuery): Boolean;
begin
try
Qry.ExecSQL;
Result := False;
except
Result := True;
end;
end;
procedure Test;
begin
if A(Query1) or A(Query2) or A(Query3) then
ShowMessage('Ошибка в запросах!');
end;
Asail (2007-04-17 00:25:00) [3]
> {RASkov} (16.04.07 23:47) [32]
> Не видел ни одного примера где была необходимость включать
> Complete boolean evaluation.... Т.е. чёб без нее никак.
И нет таких (чтоб необходимость)... Я просто показал конкретный пример, как можно нарваться на неприятности в совершенно тривиальном коде, по незнанию некоторых нюансов компиляции. И если бы не этот нюанс с директивой Complete boolean evaluation, то этот код был-бы вполне легитиный ...имхо тоже.
{RASkov} (2007-04-16 23:47:00) [4]Не видел ни одного примера где была необходимость включать Complete boolean evaluation.... Т.е. чёб без нее никак.
{RASkov} (2007-04-16 23:44:00) [5]> [30] Asail (16.04.07 23:29)
Это пример того, как НЕ надо делать :) И это уже ошибка программиста... имхо.
Asail (2007-04-16 23:29:00) [6]
function A(Qry: TQuery): Boolean;
begin
try
Qry.ExecSQL;
Result := False;
except
Result := True;
end;
end;
procedure Test;
begin
if A(Query1) or A(Query2) or A(Query3) then
ShowMessage('Ошибка в запросах!');
end;
Вот конкретный пример, демонстрирующий проблему.
1) {$B-} При падении в Query1 - Query2 и Query3 даже не попытаются выполниться
2) {$B+} При падении в Query1 - Query2 и Query3 замечательно отработают.
Так-что учитыватьсей нюанс весьма желательно :-).
Германн (2007-04-16 16:03:00) [7]
> Asail (16.04.07 09:22) [22]
>
>
> > Пример в студию, пожалуйста!
>
> . . .
> if IsCheckSomething1 and IsCheckSomthing2 then
> DoSomething1;
>
Это не пример. Это теоретическая абстракция. :(
{RASkov} (2007-04-16 12:04:00) [8]> Ой туплю...
Да ладно...:) я с [5] и в [9] точ так-же ступил :)
Asail (2007-04-16 11:45:00) [9]
> {RASkov} (16.04.07 11:31) [25]
Ой туплю... Конечно-же OR...
Ну, да пример остается в силе (с небольшой поправкой: выполнить DoSomething1 только в том случае если или DoSomething2 или DoSomething3 или обе выполнились успешно.)
{RASkov} (2007-04-16 11:39:00) [10]> [24] Asail (16.04.07 10:18)
> Complete boolean evaluation
при отключенной опции вычисляются ВСЕ выражения до тех пор, пока вычисление дальше не перестанет быть значимым...
if A and B or C then...
здесь С может быть опущен(не вычеслен)....
{RASkov} (2007-04-16 11:31:00) [11]> [24] Asail (16.04.07 10:18)
> Если "Complete boolean evaluation" не выставленна, а IsCheckSomething1
> возвращает true, то DoSomething3 не будет выполнена никогда
Да вжизь не поверю, что:
if True andFalse then DoSomething1;
- при таком раскладе выполниться DoSomething1;
С ORвот такое может случиться...
Asail (2007-04-16 10:18:00) [12]Не факт...
На пример, если надо выполнить DoSomething1 только в том случае если DoSomething2 и DoSomething3 обе выполнились успешно (вернули True), то приведенный в [22] пример ИМХО наиболее лаконичен и читабелен.
Johnmen (2007-04-16 09:26:00) [13]
> Если "Complete boolean evaluation" не выставленна, а IsCheckSomething1
> возвращает true, то DoSomething3 не будет выполнена никогда
> (что может быть весьма не желательно).
Если это "весьма не желательно", то м.б. стОит просто вызвать DoSomething3 и не гиморойничать с if ?
Asail (2007-04-16 09:22:00) [14]
> Пример в студию, пожалуйста!
. . .
if IsCheckSomething1 and IsCheckSomthing2 then
DoSomething1;
. . .
function IsCheckSomething1: Boolean;
begin
DoSomething2;
end;
function IsCheckSomething2: Boolean;
begin
DoSomething3;
end;
Если "Complete boolean evaluation" не выставленна, а IsCheckSomething1 возвращает true, то DoSomething3 не будет выполнена никогда (что может быть весьма не желательно).
Sha (2007-04-16 00:37:00) [15]> homm © (15.04.07 01:28) [19]
Есть-то оно есть ))
Но если ты не мазохист, забудь про это сразу -
и спокойный сон по ночам гарантирован.
Германн (2007-04-15 01:45:00) [16]
> Какое право ты имееш (ь)прин ежать тех (,)у кого такая необходимость
> возникала? Если после долгих раздумий не можеш (ь)понять зачем
> нужна такая штука, это совсем не значит что она для батонокидателей.
> Ты не думал что это именно у тебя ума не хватило найти
> ей применение? А применение ей есть.
>
А я собс-но и не стараюсь обязательно найти применение всем значениям всех опций компиллятора. У меня нет времени на глупости.
> А применение ей есть.
Пример в студию, пожалуйста!
P.S.
Выделения в цитате - мои. Было бы очень смешно читать сей пост, если бы не было столь грустно :(
homm (2007-04-15 01:28:00) [17]> По-моему это что-то из разряда "соломку подстелить" или
> "первое приближение алгоритмизации к батонокидательству".
Какое право ты имееш принежать тех у кого такая необходимость возникала? Если после долгих раздумий не можеш понять зачем нужна такая штука, это совсем не значит что она для батонокидателей. Ты не думал что это именно у тебя ума не хватило найти ей применение? А применение ей есть.
Германн (2007-04-15 01:23:00) [18]Вот ну никогда не возникала у меня необходимость использовать
Complete boolean evaluation! По-моему это что-то из разряда "соломку подстелить" или "первое приближение алгоритмизации к батонокидательству".
Johnmen (2007-04-14 23:10:00) [19]
> Anatoly Podgoretsky © (14.04.07 23:01) [16]
> Лучше водки выпей
Я завязал...
Anatoly Podgoretsky (2007-04-14 23:01:00) [20]> Johnmen (14.04.2007 22:54:15) [15]
Лучше водки выпей