Форум: "Основная";
Текущий архив: 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.035 c