×
Traktatov.net » Описание языка PascalABC.NET » Читать онлайн
Страница 36 из 252 Настройки

var a := Seq(1,3,5); // тип a выводится по типу возвращаемого значения Seq: array of integer

Автовыведение типа при описании невозможно при инициализации переменной лямбда-выражением:

// var f := x -> x*x; // так нельзя!

var f : Func := x -> x*x;

Внутриблочные описания используются чтобы не захламлять раздел описаний описанием вспомогательных переменных. Кроме этого, внутриблочные описания позволяют вводить переменные именно в тот момент когда они впервые потребовались. Оба этих фактора существенно повышают читаемость программы.

Оператор выбора

Оператор выбора выполняет одно действие из нескольких в зависимости от значения некоторого выражения, называемого переключателем. Он имеет следующий вид:

case переключатель of

список выбора 1: оператор1;

...

список выбора N: операторN;

else оператор0

end;

Переключатель представляет собой выражение порядкового типа или строкового типа, а списки выбора содержат константы совместимого по присваиванию типа. Как и в операторе if, ветка else может отсутствовать.

Оператор case работает следующим образом. Если в одном из списков выбора найдено текущее значение переключателя, то выполняется оператор, соответствующий данному списку. Если же значение переключателя не найдено ни в одном списке, то выполняется оператор по ветке else или, если ветка else отсутствует, оператор case не выполняет никаких действий.

Список выбора состоит либо из одной константы, либо для перечислимого типа из диапазона значений вида a..b (константа a должна быть меньше константы b); можно также перечислить несколько констант или диапазонов через запятую. Например:

case Country of

'Россия': Capital := 'Москва';

'Франция': Capital := 'Париж';

'Италия': Capital := 'Рим';

else Capital := 'Страна отсутствует в базе данных';

end;

case DayOfWeek of

1..5: writeln('Будний день');

6,7: writeln('Выходной день');

end;

Списки выбора не должны пересекаться. Например, следующий фрагмент

case i of

2,5: write(1);

4..6: write(2);

end;

приведет к ошибке компиляции.

Оператор цикла for

Оператор цикла for имеет одну из двух форм:

for переменная := начальное значение to конечное значение do

оператор

или

for переменная := начальное значение downto конечное значение do

оператор

Кроме того, переменную можно описать непосредственно в заголовке цикла:

for переменная: тип := начальное значение to или downto конечное значение do

оператор

или

for var переменная := начальное значение to или downto конечное значение do

оператор

В последнем случае используется автоопределение типа переменной по типу начального значения. В двух последних случаях область действия объявленной переменной распространяется до конца тела цикла, которое в данном случае образует неявный блок. Вне тела цикла такая переменная недоступна, поэтому следующий цикл может использовать переменную с тем же именем:

for var i := 1 to 10 do

Print(i);

for var i := 1 to 5 do

Print(i*i);

Текст от слова for до слова do включительно называется заголовком цикла, а оператор после do - телом цикла. Переменная после слова