Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

return value of function might be undefined   Найти похожие ветки 

 
Drone ©   (2008-08-26 14:42) [0]

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;


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


 
stas ©   (2008-08-26 14:45) [1]

then Result:=true end;


 
stas ©   (2008-08-26 14:46) [2]

begin
Result:=false


 
Palladin ©   (2008-08-26 14:53) [3]


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

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


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


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;


 
Ega23 ©   (2008-08-26 14:55) [5]

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:=true end;


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


 
Ega23 ©   (2008-08-26 14:57) [6]

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

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;


 
stas ©   (2008-08-26 14:58) [7]

а так будет быстрее
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;


 
stas ©   (2008-08-26 14:59) [8]

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


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


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


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


 
Ega23 ©   (2008-08-26 15:01) [10]


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


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


 
Deltas ©   (2008-08-26 15:01) [11]


> 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:06) [12]


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


Не всегда.


 
Deltas ©   (2008-08-26 15:07) [13]


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

Например?


 
Palladin ©   (2008-08-26 15:07) [14]

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;


 
Ega23 ©   (2008-08-26 15:08) [15]


> Например?


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


 
Deltas ©   (2008-08-26 15:14) [16]


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

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


 
Drone ©   (2008-08-26 15:58) [17]

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

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



Страницы: 1 вся ветка

Текущий архив: 2008.10.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
11-1194225257
nsvi
2007-11-05 04:14
2008.10.05
Куда пропал OnEndEditLVItem?


2-1219667707
Alex05
2008-08-25 16:35
2008.10.05
Поиск и замена текста в Edit e


15-1219046504
Vlad Oshin
2008-08-18 12:01
2008.10.05
Отладка программы. Ничего не понимаю..


2-1219267699
Alral
2008-08-21 01:28
2008.10.05
Error 5 при вызове функции Bind


2-1219739361
max
2008-08-26 12:29
2008.10.05
String literals may have at most 255 elements