![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнится ли Beep ?
Ega23 © (2005-01-19 12:12:00)Сразу оговорюсь: то, что ТАК делать нельзя - я прекрасно понимаю. Сейчас как раз занимаюсь "перекраиванием" логики. Но вопрос, тем не менее, остался.
Имеется следующая ситуация:
if (SomeObject.SomeProperty) and (SomeFunction(SomeObject)) then Beep;
function SomeFunction(SomeObject:TSomeObject):Boolean;
begin
...
SomeObject.Free;
Result:=True;
end;
SomeObject.SomeProperty в условии - True.
Изменится ли выполнение условия, после выполнения SomeFunction?
Digitman (2005-01-19 12:29:00) [21]
> Изменится ли выполнение условия, после выполнения SomeFunction?
повторная проверка условия приведет к исключению, потому что SomeObject был тобой же и (надеюсь - успешно) разрушен в теле SomeFunction .. если конечно же перед повторной проверкой условия ты не создаешь SomeObject объект вновь .. но тогда и говорить об обязательной истинности условия SomeObject.SomeProperty не приходится - в ходе или после воссоздания объекта SomeObject ответственность за иниц-цию св-ва SomeProperty полностью лежит на тебе
Александр Иванов (2005-01-19 12:22:00) [22]Все будет работать. Но если выбран короткий вариант расчета логических выражений {$B-} и SomeObject.SomeProperty = False, то ф-я SomeFunction не выполнится
default (2005-01-19 12:20:00) [23]с вер-ью 0.99 нет
хотя бы только потому что переменная SomeObject в nil не устанавливается даже в случае проверки справа налево
Poirot (2005-01-19 12:19:00) [24]По моему скромному мнению только эксперементально и буит сильно зависеть от компилятора. Но по идее с лева на право буит вычисляться и если в SomeFunction что-то изменится, то оно не должно влиять... ибо уже часть выражения вычислено...
Amoeba (2005-01-19 12:14:00) [25]А разве нельзя проверить опытным путем?