Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1324540812
Фокс Йожин
2011-12-22 12:00
2012.04.29
Глюки IE9 с фреймами


15-1325052694
Медвежонок Пятачок
2011-12-28 10:11
2012.04.29
Камень в огород (джава комьюнити)


15-1324333863
Германн
2011-12-20 02:31
2012.04.29
А вот почему на звуковых картах до сих пор один выход?


15-1324931403
Юрий
2011-12-27 00:30
2012.04.29
С днем рождения ! 27 декабря 2011 вторник


2-1325588259
Валерий
2012-01-03 14:57
2012.04.29
Запретить перемещение окна зная его handle





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский