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

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

return value of function might be undefined [D7, XP]


Drone ©   (2008-08-26 14:42:00) 

function exitt(b:TWinControl):Boolean;
var i:integer;
begin
for i:=0 to b.ControlCount-1 do
if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text='exit')
then exitt:=true end;

procedure TForm1.Button1Click(Sender:TObject);
begin if exitt(self)=true then form1.Close end;


как избавиться от этой ошибки?
Ведь функция возвращает значение ...


Drone   (2008-08-26 15:58:00) [1]

@ stas, Vlad Oshin спасибо!
@ Palladin мне так казалось из-за exitt:=true
@ Ega23 спасибо огромное за поправку я не знал про result
@ Deltas без сравнения на истинность иногда булевские функции срабатывают ошибочно
@ Palladin спасибо за комент :)
@ Ega23 отлично! я не знал про Break и что без Break эта функция не будет работать.

Спасибо всем большое! Я недавно начал работать с Дельфи. Так что всего не знаю


Deltas   (2008-08-26 15:14:00) [2]


> С вариантами связано. Сейчас в точности не упомню, но прикол
> такой был.

Насчет вариантов спорить не стану. Но я же написал, что булевские переменные не обязательно сравнивать, а Boolean это не Variant. Кстати, насчет вариантов, думаю прокатит приведение типов Boolean(vrnt), где vrnt: Variant?


Ega23   (2008-08-26 15:08:00) [3]


> Например?


С вариантами связано. Сейчас в точности не упомню, но прикол такой был.


Palladin   (2008-08-26 15:07:00) [4]

Result := False;
for i := 0 to b.ControlCount - 1 do
if (b.Controls[i] is TEdit) and ((b.Controls[i] as TEdit).Text = 'exit') then begin
  Result := True;
  Break; // выход из функции
end;


Deltas   (2008-08-26 15:07:00) [5]


> > Не нужно сравнивать булевские переменные на равенство
> False, True.
>
>
> Не всегда.

Например?


Ega23   (2008-08-26 15:06:00) [6]


> Не нужно сравнивать булевские переменные на равенство False, True.


Не всегда.


Deltas   (2008-08-26 15:01:00) [7]


> for i:=0 to b.ControlCount-1 do
> if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).
> Text='exit')
> then exitt:=true end;

for i := 0 to b.ControlCount - 1 do
 if (b.Controls[i] is TEdit) and ((b.Controls[i] as TEdit).Text = 'exit') then begin
   Result := True;
   Exit;  // выход из функции
 end;
Result := False;
> if exitt(self)=true then form1.Close

Не нужно сравнивать булевские переменные на равенство False, True. Достаточно записать
if exitt(self) then form1.Close;


Ega23   (2008-08-26 15:01:00) [8]


> stas ©   (26.08.08 14:59) [8]
>
> Ega23 ©   (26.08.08 14:57) [6]
> не успел.
>


А, это не мне было.
Ну без Break эта функция вообще ошибочная.


Ega23   (2008-08-26 15:00:00) [9]


> а так будет быстрее


Гы... Это чем быстрее-то?


stas   (2008-08-26 14:59:00) [10]

Ega23 ©   (26.08.08 14:57) [6]
не успел.


stas   (2008-08-26 14:58:00) [11]

а так будет быстрее
function exitt(b:TWinControl):Boolean;
var
i:integer;
begin
Result:=false;
for i:=0 to b.ControlCount-1 do
begin
Result:= (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text='exit')
if result then break;
end;
 
end;


Ega23   (2008-08-26 14:57:00) [12]

А она у тебя ещё и неправильная:

function exitt(b:TWinControl):Boolean;
var i:integer;
begin
Result := False;
for i:=0 to b.ControlCount-1 do
if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text='exit')then
begin
 Result := True;
 Break;
end;
end;


Ega23   (2008-08-26 14:55:00) [13]

function exitt(b:TWinControl):Boolean;
var i:integer;
begin
Result := False;
for i:=0 to b.ControlCount-1 do
if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text='exit')
then exitt:=trueend;


exitt:=true
Так можно, но уже почти никто так не пишет. Пользуют Result.


Vlad Oshin   (2008-08-26 14:54:00) [14]


function exitt(b:TWinControl):Boolean;
var
 i:integer;
begin
Result:=false;
for i:=0 to b.ControlCount-1 do
  if (b.controls[i] is TEdit)and((b.Controls[i] as TEdit).Text='exit') then
  result:=true;
end;


Palladin   (2008-08-26 14:53:00) [15]


> Ведь функция возвращает значение ...

с чего ты взял?


stas   (2008-08-26 14:46:00) [16]

begin
Result:=false


stas   (2008-08-26 14:45:00) [17]

then Result:=true end;


Наверх

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