Цитата:
Сообщение от Страдалецъ
Не совсем так. В качестве параметра в кейс действительно можно передать переменную, но нельзя сделать такую штуку:
|
А, ну да. Мы с
angvelem просто друг друга неправильно поняли
Я имел ввиду, что в
case (в отличие от
in) нельзя использовать переменные в качестве вариантов проверки, а не в качестве проверяемой переменной.
Причина такого ограничения очень проста - чтобы исключить неоднозначности вида:
Код:
var
n, a, b: Integer;
...
a := 1;
b := 1;
...
case n of
a: ShowMessage('a');
b: ShowMessage('b');
else ;
end;
end;
Кроме того
case является высокооптимизированной структурой. Например в таком коде:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
n: Integer;
begin
case n of
1: ShowMessage('1');
2: ShowMessage('2');
3: ShowMessage('3');
4: ShowMessage('4');
5: ShowMessage('5');
6: ShowMessage('6');
else ;
end;
end;
не будет кучи проверок переменной
n на все возможные значения. Вместо этого компилятор создаст таблицу-вектор из которой программа будет выбирать адрес перехода как из массива. При использовании переменных такой оптитимизации добиться нельзя было бы.