Выбрать главу

var x0 := 1;

var p: Action0 := procedure -> begin Print(x0); x0 *= 2 end;

for var i:=1 to 10 do

p;

end.

Файловые типы

Файл представляет собой последовательность элементов одного типа, хранящихся на диске. В PascalABC.NET имеется два типа файлов - двоичные и текстовые. Текстовые файлы хранят символы, разделенные на строки символами #13#10 (Windows) и символом #10 (Linux). Последовательность символов для перехода на новую строку хранится в константе NewLine. Двоичные файлы в свою очередь делятся на типизированные и бестиповые.

Для описания текстового файла используется стандартное имя типа text, бестиповые файлы имеют тип file, а для описания типизированного файла используется конструкция file of тип элементов:

var

f1: file of real;

f2: text;

f3: file;

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

Стандартные файловые процедуры и функции описываются в пункте Процедуры и функции для работы с файлами.

Кроме того, в .NET имеется ряд классов, связанных с работой с файлами.

Эквивалентность и совместимость типов

Совпадение типов

Говорят, что типы T1 и T2 совпадают, если они имеют одно имя либо же определены в секции type в виде T1 = T2. Таким образом, в описаниях

type

IntArray = array [1..10] of integer;

IntArrayCopy = IntArray;

var

a1: IntArray;

a2: IntArrayCopy;

b1,c1: array [1..15] of integer;

b2: array [1..15] of integer;

переменные a1 и a2 и переменные b1 и c1 имеют один и тот же тип, а переменные b1 и b2 - разные типы.

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

Говорят, что типы T1 и T2 эквивалентны, если выполняется одно из следующих условий:

* T1 и T2 совпадают

* T1 и T2 - динамические массивы с совпадающими типами элементов

* T1 и T2 - указатели с совпадающими базовыми типами

* T1 и T2 - множества с совпадающими базовыми типами

* T1 и T2 - процедурные типы с совпадающим списком формальных параметров (и типом возвращаемого значения - для функций)

Если типы эквивалентны только если их имена совпадают, то говорят, что имеет место именная эквивалентность типов. Если типы эквивалентны если они совпадают по структуре, то говорят, что имеет место структурная эквивалентность типов. Таким образом, в PascalABC.NET имеет место именная эквивалентность для всех типов, кроме динамических массивов, множеств, типизированных указателей и процедурных типов, для которых имеет место структурная эквивалентность типов.

Только если типы T1 и T2 эквивалентны, фактический параметр типа T1 может быть подставлен вместо формального параметра-переменной типа T2.

Совместимость типов

Говорят, что типы T1 и T2 совместимы, если выполняется одно из следующих условий:

* T1 и T2 эквивалентны

* T1 и T2 принадлежат к целым типам

* T1 и T2 принадлежат к вещественным типам

* Один из типов - поддиапазон другого или оба - поддиапазоны некоторого типа

* T1 и T2 - множества с совместимыми базовыми типами

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

Говорят, что значение типа T2 можно присвоить переменной типа T1 или тип T2 совместим по присваиванию с типом T1, если выполняется одно из следующих условий:

* T1 и T2 совместимы

* T1 - вещественного типа, T2 - целого

* T1 - строкового типа, T2 - символьного

* T1 - pointer, T2 - типизированный указатель

* T1 - указатель или процедурная переменная, T2=nil

* T1 - процедурная переменная, T2 - имя процедуры или функции с соответствующим списком параметров

* T1, T2 - классовые типы, один из них - наследник другого. Поскольку в PascalABC.NET все типы кроме указателей являются потомками типа Object, то значение любого типа (кроме указателей) можно присвоить переменной типа Object

* T1 - тип интерфейса, T2 - тип класса, реализующего этот интерфейс

Если тип T2 совместим по присваиванию с типом T1, то говорят также, что тип T2 неявно приводится к типу T1.

Отображение на типы .NET

Стандартные типы PascalABC.NET реализуются типами библиотеки классов .NET. Далее приводится таблица соответствий стандартных типов PascalABC.NET и типов .NET.

Тип PascalABC.NET

Тип .NET

int64

System.Int64

uint64

System.UInt64

integer, longint

System.Int32

longword, cardinal

System.UInt32

BigInteger

System.BigInteger

smallint

System.Int16

word

System.UInt16

shortint

System.SByte

byte

System.Byte

boolean

System.Boolean

real

System.Double

double

System.Double

char

System.Char

string

System.String

object

System.Object

array of T

T[]

record

struct

Выражения и операции

Выражения и операции: обзор

Выражение - это конструкция, возвращающая значение некоторого типа. Простыми выражениями являются переменные и константы, например:

3.14

x

Более сложные выражения строятся из простых с помощью операций, вызовов функций и скобок. Данные, к которым применяются операции, называются операндами.

В PascalABC.NET имеются следующие операции: @, not, ^, *, /, div, mod, and, shl, shr, +, -, or, xor, =, >, <, <>, <=, >=, as, is, in, =>, а также операция new и операция приведения типа.

Операции @, -, +, ^, not, операция приведения типа и операция new являются унарными (имеют один операнд), остальные являются бинарными (имеют два операнда), операции + и - являются и бинарными и унарными.

Порядок выполенения операций определяется их приоритетом. В языке PascalABC.NET четыре уровня приоритетов операций, задаваемых таблицей приоритетов.

Для типов, определенных пользователем, ряд операций можно перегружать.

Справка по операциям PascalABC.NET

* Арифметические операции

* Логические операции

* Операции сравнения

* Строковые операции