![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;