Форум: "Начинающим";
Текущий архив: 2012.04.29;
Скачать: [xml.tar.bz2];
Внизиспользование оператора 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c