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

Seq(1,2,3) + Arr(5,6,7)

Кроме того, к последовательности некоторого типа можно присоединить операцией + значение этого типа как первый или последний элемент последовательности, например:

Seq(1,2,3) + 5

3 + Seq(5,6,7)

3 + Seq(5,6,7) + 9

Операция + является сокращённым вариантом операции Concat.

Цикл по последовательности

Элементы последовательности можно обойти с помощью цикла foreach:

foreach var x in s do

if x>2 then

Print(x);

Совместимость по присваиванию

Переменной типа последовательность с элементами типа T можно присвоить одномерный массив array of T, список List, двусвязный список LinkedList, множество HashSet или SortedSet, а также объект любого класса, поддерживающего интерфейс System.Collections.Generic.IEnumerable.

Стандартные функции и методы

Для последовательностей доступны многочисленные методы обработки последовательностей.

Для последовательностей доступны также стандартные функции обработки последовательностей.

Записи

Описание записей

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

record

описания полей

end

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

Например:

type

Person = record

Name: string;

Age: integer;

end;

Переменные типа запись

Переменные типа запись хранят в непрерывном блоке памяти значения всех полей записи.

Для доступа к полям записей используется точечная нотация:

var p: Person;

begin

p.Name := 'Иванов';

p.Age := 20;

writeln(p); // (Иванов,20)

end.

По умолчанию процедура write выводит содержимое всех полей записи в круглых скобках через запятую.

Методы и модификаторы доступа для записей

В PascalABC.NET внутри записей допустимо определять методы и свойства, а также использовать модификаторы доступа. Таким образом, описание записи в PascalABC.NET имеет вид:

record

секция1

секция2

...

end

Каждая секция имеет вид:

модификатор доступа

описания полей

объявления или описания методов и описания свойств

Модификатор доступа в первой секции может отсутствовать, в этом случае подразумевается модификатор public (все члены открыты).

Например:

type

Person = record

private

Name: string;

Age: integer;

public

constructor Create(Name: string; Age: integer);

begin

Self.Name := Name;

Self.Age := Age;

end;

procedure Print;

end;

procedure Person.Print;

begin

writelnFormat('Имя: {0} Возраст: {1}', Name, Age);

end;

Как и в классах, методы могут описываться как внутри, так и вне тела записи. В примере выше конструктор описывается внутри записи, а метод Print объявляется внутри, а описывается вне тела записи. Метод-конструктор всегда имеет имя Create и предназначен для инициализации полей записи.

Инициализация записей

При описании переменной или константы типа запись можно использовать инициализатор записи (как и в Delphi Object Pascal):

const p: Person = (Name: 'Петрова'; Age: 18);

var p: Person := (Name: 'Иванов'; Age: 20);

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