Записи
Например:
with c.bd do month: = 9;
Это эквивалентно:
with с do with bd do month: = 9;
…или:
with c,bd do month: = 9;
…или:
c.bd.month: = 9;
Турбо Паскаль разрешает использовать записи с так называемыми вариантными полями, например:
type Forma = record Name: String; case Byte of 0: (Birthplace: String [40]); 1: (Country: String [20]; EntryPort: String [20]; EntryDate: 1.. 31; ExitDate: 1..31) end;
В этом примере тип FORMA определяет запись с одним фиксированным полем NAME и вариантной частью, которая задается предложением CASE… OF. Вариантная часть состоит из нескольких вариантов (в примере – из двух вариантов: 0 и 1). Каждый вариант определяется константой выбора, за которой следует двоеточие и список полей, заключенный в круглые скобки. В любой записи может быть только одна вариантная часть, и, если она есть, она должна располагаться за всеми фиксированными полями.
Замечательной особенностью вариантной части является то обстоятельство, что все заданные в ней варианты "накладываются" друг на друга, т.е. каждому из них выделяется одна и та же область памяти. Это открывает дополнительные возможности преобразования типов, например:
var mem4: record case Byte of 0: (by: array'[0..3] of Byte); 1: (wo: array [0..1] of Word); 2: (lo: longint); end;
В этом примере запись МЕМ4 имеет три варианта, каждый из которых занимает в памяти один и тот же участок из 4 байт. В зависимости от того, к какому полю записи мы обращаемся в программе, этот участок может рассматриваться как массив из 4 байт (поле ВТ), массив из двух целых типа WORD (поле WO) или, наконец, как одно целое число типа LONGINT (поле LO).