Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Возник такой вопросик в связи с оператором if ... then   Найти похожие ветки 

 
gauss ©   (2004-04-15 16:22) [0]

в Java есть такой вариант этого оператора с несколькими условиями, где проверяется первое условие и если оно не выполняется, то второе условие не проверяется( а есть вариант когда не зависимо от результата проверки первого условия второе так же проверяется). В delphi такое возможно или нет?


 
Reindeer Moss Eater ©   (2004-04-15 16:23) [1]

Там такое по умолчанию


 
Тимохов ©   (2004-04-15 16:24) [2]

в дельфи тоже есть:
project\oprionts\compiler\complete bool eval
или директива компилятора $B


 
Reindeer Moss Eater ©   (2004-04-15 16:25) [3]

{$BooLeval OFF}       {-   L   логическое выражение вычислять до конца  =}


 
Семен Сорокин ©   (2004-04-15 16:25) [4]

{$B+}
{$B-}


 
Тимохов ©   (2004-04-15 16:28) [5]


> Reindeer Moss Eater ©   (15.04.04 16:25) [3]

наборот, вроде


 
Reindeer Moss Eater ©   (2004-04-15 16:35) [6]

{$BooLeval ON}
procedure TForm1.Button1Click(Sender: TObject);
begin
if False and (MessageDlg("$BooLeval OFF - не вычислять до конца",mtInformation,[mbOk],0) = mrOk) then
 ;
end;


 
gauss ©   (2004-04-15 16:37) [7]

так {$B+} эквивалентен {$BooLeaval ON}


 
Тимохов ©   (2004-04-15 16:38) [8]

мой вариант

  {$BooLeval ON}
  if False and (MessageDlg("меня видно",mtInformation,[mbOk],0) = mrOk) then;
  {$BooLeval off}
  if False and (MessageDlg("меня нет",mtInformation,[mbOk],0) = mrOk) then;


 
Vuk ©   (2004-04-15 16:47) [9]

В случае {$BooLeval off} код для строки
>if False and (MessageDlg("меня нет",mtInformation,
>[mbOk],0) = mrOk) then;
не генерируется.


 
WebErr ©   (2004-04-15 16:53) [10]


> Тимохов ©   (15.04.04 16:38) [8]

К вопросу о самом коротком коде - всё-таки {$B+}, а не {$BooLeval ON} - это даже я использую, при моей-то нелюбви к таким конструкциям! :))))


 
Тимохов ©   (2004-04-15 16:57) [11]


> Vuk ©   (15.04.04 16:47) [9]
> В случае {$BooLeval off} код для строки
> >if False and (MessageDlg("меня нет",mtInformation,
> >[mbOk],0) = mrOk) then;
> не генерируется.

ну и что?
имхо это лишний раз говорит об уме компилятора дельфи.


 
WebErr ©   (2004-04-15 16:58) [12]


{$B+}
procedure FormProcess;
begin
 if not (Assigned(MyForm) and MyForm.FSomeField = 1000) then
   MessageDlg("Hi! I""m a Rabbit Joe! So loved and always yours!!!", mtInformation, [mbOk], 0);
end;


 
VMcL ©   (2004-04-15 16:59) [13]

>>Тимохов ©  (15.04.04 16:57) [11]

>говорит об уме компилятора дельфи.

Компилятор Delphi отличается умом и сообразительностью... умом и сообразительностью.


 
WebErr ©   (2004-04-15 17:03) [14]

Ага, ... и послушностью... (ИНОГДА и только по праздникам!)


 
Vuk ©   (2004-04-15 17:04) [15]

to Тимохов ©   (15.04.04 16:57) [11]:
>ну и что?
То, что неплохо об этом помнить и что такой код не подходит для демонстрации работы опции BoolEval - в некоторых случаях он не дает вообще никакого исполняемого кода, т.к. условие вычисляется еще на этапе компиляции.


 
Тимохов ©   (2004-04-15 17:21) [16]


> Vuk ©   (15.04.04 17:04) [15]

Для демонстрации языка имхо вполне достаточно.
Вы думаете нужно понимать такие тонкости?
Пример показывает, что второе сообщнеие не выведется, т.е. демонстрирует заявленное поведение. Этого не достаточно?


 
Vuk ©   (2004-04-15 17:24) [17]

Угу. Заявленное поведение демонстрируется полным отсутствием всякого поведения. :o)


 
Тимохов ©   (2004-04-15 17:30) [18]


> Vuk ©   (15.04.04 17:24) [17]

Алексей, но именно отсутствие действия и заявлялось, т.е. остутсвтие второй проверки. Компилятор честно выполнил желаемое. Все вроде ок.


 
Vuk ©   (2004-04-15 17:49) [19]

to Тимохов ©   (15.04.04 17:30) [18]:
>Алексей, но именно отсутствие действия и заявлялось, т.е.
>остутсвтие второй проверки.
Напомню, что получили отсутствие не только второй проверки, но и первой. ;o) Вот если бы вместо константы false стояла функция, возвращающая false...


 
Тимохов ©   (2004-04-15 17:54) [20]


> Вот если бы вместо константы false стояла функция, возвращающая
> false...

тогда бы код был.


 
Vuk ©   (2004-04-15 17:55) [21]

Именно. И можно было бы бынальной трассировкой выяснить как это работает.


 
Тимохов ©   (2004-04-15 18:17) [22]


> Vuk ©   (15.04.04 17:55) [21]

Посморили, но каждый остался при своем :))))) Как обычно...
Пример корректен, т.к. уже сказал выше почему...



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
6-1078708961
Greenpeace
2004-03-08 04:22
2004.05.02
Вопрос новичка: где поискать информацию?


14-1081646352
Думкин
2004-04-11 05:19
2004.05.02
С днем рождения! 11 апреля.


14-1081400275
Ega23
2004-04-08 08:57
2004.05.02
Еврофутбол


1-1081762312
s
2004-04-12 13:31
2004.05.02
Работа с INI файлами


3-1081161522
Smalik
2004-04-05 14:38
2004.05.02
Типы полей при работе с Access