Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

Возник такой вопросик в связи с оператором 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.036 c
1-1081509914
LNick
2004-04-09 15:25
2004.05.02
Обработчик событий


14-1081370659
ИМХО
2004-04-08 00:44
2004.05.02
Депортиво - Милан 4:0


14-1081833297
Vlad Oshin
2004-04-13 09:14
2004.05.02
Не поможите найти драйвер для AIC7895p(SCSI) под Win2000?


1-1082012479
Secety
2004-04-15 11:01
2004.05.02
От Dfm к рабочей форме.


8-1074610714
Laumer
2004-01-20 17:58
2004.05.02
Как выключить другие звуки и вывести свой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский