Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать присваивание в операторе 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо