Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.024 c
6-1078770485
Soft
2004-03-08 21:28
2004.05.02
Роутинг протокола Netbios или общая область видимости имен Win.


4-1077893106
alxx
2004-02-27 17:45
2004.05.02
Создаю Static... Получаю иероглифы вместо кириллицы.


1-1082001029
bear9
2004-04-15 07:50
2004.05.02
Список выделенных компонентов в Tlistview


3-1081008260
Balepa
2004-04-03 20:04
2004.05.02
Ошибка DBCombobox


8-1075208188
Inc-Vizitor
2004-01-27 15:56
2004.05.02
Название проигрываемой песни в winamp




   Наверх