Пысли
о
Паскале
В л а д и с л а в Д Е М Ь Я Н И Ш И Н
h ttp ://am onit.boom .ru
(Продолжение,
начало см. в М К N q 46, 51 —52, 4, 6 ~ 7
165, 1 7 0 -1 7 1 , 175, 177-178))
GoemecTumocTb типов
В чистом виде эквивалентность (равенство) типов п е р е -
менных или значений п а р ам е тр о в требуется только в случае
передачи па р ам е тр о в при вы зове процедур или ф ункций (та-
ким о б р а зо м , типы ф актических, т. е. передаваемы х, и ф ор-
мальных, т. е. требуем ы х, п а р ам е тр о в должны быть эквива-
ленты). В других Pascal-конструкциях используются несколь-
ко ослабленны е (но более детальные) ограничения, назы ва-
емые С О В М Е С Т И М О С Т Ь Ю типов.
Выполнение операций в вы ражениях, а та кж е операции
сравнения перем енны х тр е бую т, чтобы операндь имели сов
местимые типы. С овм естим ость типов двух переменны х (или
некоторы х значений) имеет м есто, если выполняется хотя бы
одно из следую щ их условий:
ф ' два типа эквивалентны (равны);
о б а типо целые, либо вещ ественные,
один тип является ограниченны м типом , причем его б а -
зовы м типом является другой тип —
typ e
T I = s h o r t in t ;
Т2 = 1 .
.1 0 0 »
т. е. тип Т2 м ож ет иметь значения в диа пазон е 1.
.100, и л ю -
б о е значение этого типа попод ает в д иапазон допустимых
значений для типа S h o rtin t (-128.
.127), стало быть, типы Т1 и
Т2 совместимы, т е м огут взаим но заменяться в вы ражениях
и сравнениях,
о б а типа являются ограниченны ми, причем их базовы м
типом является один и то т ж е тип —
typ e
Т 1 = 1 0 .
.1 0 0 ;
Т 2 = 1 . .5 ;
опять-таки, типы Т1 и Т2, судя по д иа п азон а м описанны х для
них значений, являются целыми — значит, эти типы совм ес-
тимы;
о б а типа являются множественными типами (см. главу
«М ножественные типы»), причем их базовы е типы совместимы:
typ e
Т1 = s e t o f b y te ;
Т2 = s e t o f 1 . .1 0 ;
здесь конструкция немного сложнее, но принцип тот же; м но-
жественный тип Т2 может содержать значения в диапазоне 1 1 0 ,
то же касается и типа Byte, т. е. типы Т1 и Т2 совместимы;
о б а типа являются упакованны м и символьными м а сси-
вами (см. главу «Составные типы. Регулярные типы (масси-
вы)») с одинаковы м числом элементов;
один тип является строковы м (см. главу «С троковы е ти-
пы»), а другой либо та кж е является строковы м типом , либо
упакованны м символьным м ассивом , либо символьным типом;
пл один тип является ссылочным, а другой либо тож е ссы-
лочный, либо является бестиповым указателем (см. главу «Ссы-
лочные типы. Д инам ические переменные»);
о б а типа являются процедурными (см. главу «П роцеду-
ры и функции») с одинаковы м числом п арам етров, типы ко -
торы х эквивалентны (соответствие п о порядку перечисления
в описании п роцед урного типа), то ж е касается и типов во з-
вр а щ а е м о го результата (для ф ункциональных типов).
Здесь я за бе ж а л нем ного вперед. С ейчас не стоит глубо-
ко задумываться над последними пятью пунктами.
Есть специальное понятие — совм естим ость по присваи-
ванию. О пе ра то р присваивания считается корректны м, ес-
ли тип перем енной в левой части совм естим по присваива-
нию с типом вы ражения из правой части,
левая ч а сть = правая ч а сть
П р о щ е говоря, перем енной од ного типа (той что слева)
м ожно присвоить значение переменной (или результата вы
ражения) другого типа (той что справа), если типы этих пе-
ременных совместимы по присваиванию.
Д ва типа являются совместимыми по присваиванию , если
выполняется хотя бы одно из следую щ их условий:
о б а типа эквивалентны и ни один из них не является
файловым типом (см. главу «Ф айловы е типы и ввод-вывод»)
или не является структурны м типом , содерж ащ им поле с ф ай-
ловым типом на одном из своих уровней;
о б а типа являются совместимыми дискретными (целыми), и
значения типа правой части попадаю т в диапазон возможных
значений типа левой части (чтобы левая часть могла принять но-
вое значение без возникновения ош ибки от переполнения);
о б а типа являются вещ ественными типам и, и значения
типа п равой части по пад а ю т в д иапазон значений типа ле-
вой части;
*■ тип левой части является вещ ественным типом , а тип
п равой части является целым типом;
*■ тип левой части является строковы м типом , а тип п р а -
вой части — л ибо строковы м типом , л ибо символьным типом ,
либо упакованны м символьным м ассивом ;
о б а типа являются совместимыми упакованны м и сим-
вольными массивам и;
о б а типа являются совместимыми м ножественны м и ти-
пами, причем м нож ество из правой части целиком входит во
м нож ество из левой части;
о б а типа являются совместимыми ссылочными типом и,
л ибо совм естим ьм и процедурны ми типам и;
тип левой части является процедурны м типом , а п р а -
вая часть представляет со бо й идентиф икатор процедуры или
ф ункции, причем с тем же числом п арам етров, что и у типа
левой части; типы пар ам е тр о в должны быть эквивалентны,
та кж е эквивалентны типы во зв ра щ ае м о го результата (в слу-
чае функции);
о б а типа объектовы е, причем тип п равой части явля-
ется по то м ком типа левой части (см. главу «С редства объ
е ктно -о р и е нти р о ва н но го програм м ирования»), либо о б а ти-
па являются ссылочными на совместимые объектовы е типы
Если в о п е р а то р е присваивания не выполняется ни одно
из этих условий, то на этапе компиляции или при вы полне-
нии програм м ы выдается сообщ ение о б ош ибке.
Составные типы
П росты е
т и п ы ,
о которы х я рассказы вал ранее, о п ред е-
ляю т различны е м нож ества атом арны х (неразделимых) зн а -
чений. Н априм ер, имеем перем енную типа Longint, в ко то -
рой все 4 байта (занимаемые ею в памяти) составляю т ка -
ко е -то единое числовое значение. С оставны е, или структур-
ные типы, в отличие от простых, за д аю т м нож ества «слож-
ных» значений; каж дое значение из та ко го м нож ества о б р а -
зует некоторы й агр е га т (совокупность) нескольких значений
друго го типа (или других типов). М о ж н о сказать, что состав-
ные типы определяю т некоторы й сп о со б о б р а зо ва ни я новых
типов из уж е имеющ ихся, причем отдельные элементы состав-
ных зночений м огут иметь л ю бо й, в том числе составной, тип.
Т аким о б р а зо м , Pascal допускает о б р а зо в а н и е структур дан-
ных произвольной сложности, позволяя тем самы м достичь
адекватного представления в п р ограм м е тех данных, ко то -
рыми о н а оперирует.
В Pascal e определены следую щ ие составны е типы:
регулярны е типы (массивы);
ком бинированны е типы (записи);
м ножественны е типы;
строковы е типы;
ф айловые типы,
ф' объектовые типы
# 10/181 11.03-18 03.2002
МОЙ КОМПЬЮТЕР
предыдущая страница 38 Мой Компьютер 2002 10 читать онлайн следующая страница 40 Мой Компьютер 2002 10 читать онлайн Домой Выключить/включить текст