PascalABC.NET

Оператор описания переменной

В PascalABC.NET можно описывать переменные внутри составного оператора begin-end в специальном операторе описания переменной. Такие описания называются внутриблочными.

Внутриблочное описание имеет одну из форм:

var список имен: тип;

или

var имя: тип := выражение;

или

var имя: тип = выражение; // Для совместимости с Delphi

или

var имя := выражение;

Имена в списке перечисляются через запятую. Например:

begin
  var
a1,a2,a3: integer;
  var n: real := 5; 
  var s := ' ';
 
...
end
.

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

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

Кортежное присваивание с описанием переменных

Кортежное присваивание (распаковку кортежа в переменные) можно совмещать с описанием переменных:

var t := (1,2);
(var a, var b) := (1,2);

или

var (a,b) := (1,2);

Распаковка кортежа в переменные часто используется при возвращении функцией кортежа:

function SP(a,b: real) := (a*b,2*(a+b));  
...
var (S,P) := SP(2,3);

Инициализация лямбда-выражением

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

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

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