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

Вниз

использование оператора goto   Найти похожие ветки 

 
Scott Storch ©   (2012-01-05 15:35) [0]

в каких случаях оправдано использование оператора GoTo? Например, есть фунция, которая проверяет валидность некоторого параметра, по шагам проверяя некоторые условия. Если условие не выполняется нужно выводить ошибку. Нормально ли использование GoTo в таком случае?  


procedure TG_Controller.CF_ValidateName1Parameter(Paramter: TParameter);
const
 Chars1 = ["A".."Z", "a".."z"];
 Chars2 = ["A".."Z", "a".."z", "0".."9", "_"];
var
 CharSet: TCharSet;
 Length_, I: Integer;
label ERROR_LABEL;
begin
 Length_ := Length(Paramter.Value);
 // Step 1
 if Length_ = 0 then
   GoTo ERROR_LABEL;
 // Step 2
 for I := 1 to Length_ do
 begin
   if I = 1 then
     CharSet := Chars1
   else
     CharSet := Chars2;
   if not (Paramter.Value[I] in CharSet) then
     GoTo ERROR_LABEL;
 end;
 // Step N
 // ...
 GoTo ERROR_LABEL;
 // ...
 Exit;
 ERROR_LABEL:
   ShowErrorFmt(@PARAMETER_VALUE_ERROR, [Parameter.Name]);
end;


 
DVM ©   (2012-01-05 15:37) [1]


> Нормально ли использование GoTo в таком случае?  

Здесь можно было обойтись.


 
DVM ©   (2012-01-05 15:40) [2]


procedure TG_Controller.CF_ValidateName1Parameter(Paramter: TParameter);
const
Chars1 = ["A".."Z", "a".."z"];
Chars2 = ["A".."Z", "a".."z", "0".."9", "_"];
var
CharSet: TCharSet;
Length_, I: Integer;
begin
Length_ := Length(Paramter.Value);
// Step 1
if Length_ = 0 then
  raise Exception.CreateFmt(@PARAMETER_VALUE_ERROR, [Parameter.Name]);
// Step 2
for I := 1 to Length_ do
begin
  if I = 1 then
    CharSet := Chars1
  else
    CharSet := Chars2;
  if not (Paramter.Value[I] in CharSet) then
    raise Exception.CreateFmt(@PARAMETER_VALUE_ERROR, [Parameter.Name]);
end;
// Step N
// ...
raise Exception.CreateFmt(@PARAMETER_VALUE_ERROR, [Parameter.Name]);

end;


 
OW ©   (2012-01-05 16:00) [3]

Однажды некто проиграл в шахматы по всему выигранную партию. После анализа с известным гроссом, выяснилось, что ошибкой был его ход ладьёй за свою пешку.
- Но как же так! Ведь Вы сами писали в монографии, что при неясности позиции лучше всего ставить ладью именно так!, - воскликнул некто.
- Все правильно, ладью всегда надо ставить за свою пешку, кроме тех случаев, когда это плохо, - пожал плечами гроссмейстер.


 
Sha ©   (2012-01-05 16:47) [4]


function TG_Controller.IsParamValid(Param: TParameter): boolean;
const
 Chars1 = ["A".."Z", "a".."z"];
 Chars2 = ["A".."Z", "a".."z", "0".."9", "_"];
var
 i: Integer;
begin;
 i := Length(Param.Value);
 while (i > 1) and (Param.Value[i] in CharS2) do dec(i);
 Result := (i = 1) and (Param.Value[1] in CharS1);
 end;



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

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

Наверх




Память: 0.48 MB
Время: 0.007 c
2-1325752586
Anthony
2012-01-05 12:36
2012.04.29
Вопрос о передаче фокуса элементу


15-1324758605
Юрий
2011-12-25 00:30
2012.04.29
С днем рождения ! 25 декабря 2011 воскресенье


15-1324500669
Nic
2011-12-22 00:51
2012.04.29
Покритикуйте дизайн


2-1325420142
elizaveta1541
2012-01-01 16:15
2012.04.29
Использование кнопки Закрытия на главной форме


2-1325371999
Gu
2012-01-01 02:53
2012.04.29
строки Xe2