![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать присваивание в операторе if? [D7, XP]
cvg © (2008-05-15 09:41:00)Собственно, сабж. Хотелось бы изобразить что-то типа
if (buf:=func(x)) = 0
Servy (2008-05-15 22:11:00) [1]> buf := func(x);
> if a and b and ( buf = 0 )
> then ...
А чем
if a and b then
begin
buf := func(x);
if (buf = 0) then
...
end;
не угодило? И гораздо нагляднее, чем длинный if, в котором еще в конце было бы запрятано присваивание.
Или тут борьба за коротий исходник в ущерб понятности? Тогда не тот язык выбран...
Игорь Шевченко (2008-05-15 21:51:00) [2]
> но ведь присвоение в операторе условия - это не просто плохо
> - это источнык массы глюков
При грамотном применении глюков нет.
> Я в одной книжке даже читал упоминания, что именно из-за
> так называемых "операторов с побочным действием" какая-то
> известная программа (мне она не известна) глючит.
Не верь, хозяин, этому константинопольскому ходже. Бумага, она терпеливая.
TStas (2008-05-15 21:42:00) [3]Простите, мне очень любопытно, а что за конечная задача, которую никак нельзя решить иначе, чем применяя сишные циничные извращения?
Меня, конечно, обругают, но ведь присвоение в операторе условия - это не просто плохо - это источнык массы глюков. Любой нормальный человек считает, что равно - это "=". Я в одной книжке даже читал упоминания, что именно из-за так называемых "операторов с побочным действием" какая-то известная программа (мне она не известна) глючит.
cvg (2008-05-15 10:10:00) [4]Ну и пусть не вычислыется -- мне оно так и надо.
Значит, остается что-нибуть типа
if a and b and func(x,buf)
then ...
Ну а второй параметр описан в func как возвращаемый, и дальше его уже алализировать...
Ega23 (2008-05-15 10:04:00) [5]
> cvg (15.05.08 10:02) [7]
>
> Значит, в Паскале/Делфи такое никак? :(
>
if a and b and (func(x)=0)
Игорь Шевченко (2008-05-15 10:04:00) [6]Значит никак.
> а мне вот позарез (ну или почти позарез...) надо, чтобы
> функция вычислялась прямо в условии. То есть, на самом-то
> деле условия там очень длинное и громоздкое, и вот не хотелось
> бы даже заходить в эту функцию, если уже раньше получилось,
> что условие не выполняется
Функция-то может не вычисляться, если по условию до нее дело не дойдет.
cvg (2008-05-15 10:02:00) [7]Значит, в Паскале/Делфи такое никак? :(
Vlad Oshin (2008-05-15 10:00:00) [8]переписать на MyIF =function(...var ValForCompare:tType):boolean
Vlad Oshin (2008-05-15 10:00:00) [9]Удалено модератором
Vlad Oshin (2008-05-15 10:00:00) [10]Удалено модератором
cvg (2008-05-15 10:00:00) [11]Ну в том смысле, что можно написать
buf := func(x);
if a and b and ( buf = 0 )
then ...
а мне вот позарез (ну или почти позарез...) надо, чтобы функция вычислялась прямо в условии. То есть, на самом-то деле условия там очень длинное и громоздкое, и вот не хотелось бы даже заходить в эту функцию, если уже раньше получилось, что условие не выполняется. Поэтому и хочется записать
if a and b and ( (buf:=func(x)) = 0 )
then
Вроде, в каком-то из языков (м.б. Си...) такое допускается...
Игорь Шевченко (2008-05-15 09:55:00) [12]Здесь вам не тут.
В Паскале оператор присваивания в отличие от С не имеет значения
Leonid Troyanovsky (2008-05-15 09:48:00) [13]
> cvg (15.05.08 09:41)
> if (buf:=func(x)) = 0
Очень туманно.
--
Regards, LVT.