Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблемы с IF [D7, WinXP]


Страницы:   1 2

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]

Лучше водки выпей


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо