- •2.1. Стандартные типы данных
- •2.2. Описание структур данных
- •2.3.1. Интервальные типы данных
- •2.4. Динамические структуры данных
- •2.5. Вариантные структуры данных
- •V: Variant; ; : rv.
- •I: Integer; ::::
- •V: Variant;
- •V: Variant;
- •V: Variant;
- •2.6. Выражения в Object Pascal
- •X, Rd: Double; I, Ri: Integer;
- •Var а, в, с: Boolean
- •X, y: Double;
Структуры данных в Delphi
2.1. Стандартные типы данных
2.1.1. Числовые типы
Некоторые типы данных, стандартные для языка Pascal, немного изменились в сторону расширения диапазона возможных значений и, соответственно, увеличения занимаемого места. Это связано с тем, что создаваемые в Delphi приложения ориентированы на работу в операционной системе Windows, а не DOS, что накладывает на них некоторые требования. Программы, выполняемые в Windows, широко используют системные функции операционной системы, передавая им множество параметров. Таким образом, представление информации в Delphi должно соответствовать представлению аналогичной информации в Windows.
Рассмотрим сравнительные таблицы типов данных в Pascal и Delphi (см. табл. 2.1 и 2.2), в которых указаны сведения о типах данных в Pascal и Delphi. В нижних частях таблиц приводятся сведения о новых типах данных, которых не было в языке Pascal.
Из сравнительных таблиц видно, что среди целочисленных типов данных не произошло существенных изменений, за исключением увеличения диапазона типа Integer. Это связано с частым использованием данного типа при передаче параметров системным функциям Windows. Также добавлены новые Типы Cardinal, Int64 и Longword для более удобной организации структур данных в программе.
Новый целочисленный тип данных Smallint соответствует типу Integer языка Pascal и добавлен в Delphi для упрощения переноса фрагментов текста из старых программ, работающих в операционной системе DOS, которые используют переменные типа Integer и чувствительны к возможному изменению размеров этих переменных. При переносе таких фрагментов ссылки на тип Integer следует заменять на Smallint.
Среди вещественных типов данных изменены возможности типов Real, Extended и Comp, а также, для совместимости с программами, написанными на Turbo Pascal, добавлен новый тип Real48, совпадающий с типом Real языка Pascal.
Особого внимания заслуживает новый вещественный тип данных Currency, предназначенный для использования в финансовых вычислениях и призванный исключить ошибки искажения значений, присущие переменным с плавающей точкой. Переменные типа Currency на самом деле хранятся не как вещественные переменные, а как целочисленные переменные типа Int64, а при использовании их в выражениях автоматически делятся на 10000. Таким образом, значения переменных типа Currency являются числами не с плавающей точкой, а с фиксированной.
Сравнительная таблица целочисленных типов данных в Pascal и Delphi
Таблица 2.1
2.1.2. Строковые типы данных
В языке программирования Pascal для работы со строками был предусмотрен тип String, представляющий собой последовательность (массив) символов, размером до 255-ти байт, в начале которой находилось однобайтовое число, содержащее длину строки. С другой стороны, в языке С, на который, в основном, ориентируется среда Windows, строки хранятся в так называемом ASCIIZ-формате.
Каждая строка в формате ASCIIZ представляет собой указатель на массив символов, который заканчивается нулевым символом. Такое представление строки имеет свои преимущества — например, практически неограниченная длина ASCIIZ-строк, и свои недостатки — связанные с неудобством использования указателей (ссылочных переменных).
В Delphi предлагается компромисс между двумя подходами к хранению строк. Внутреннее представление строки реализовано динамически, в ASCIIZ-формате, тогда как с точки зрения программиста строка является массивом символов известной длины (символы в массиве пронумерованы от единицы). В связи с этим отменена возможность доступа к нулевому элементу строки с целью получения ее длины. Длину строки в Delphi можно определить с помощью функции Length:
Length(<Строка>): Integer;
Установить длину строки можно с помощью процедуры SetLength: SetLength(<Строка>, <Новая длина>);
Еще одной особенностью работы в среде Windows является возможность использования кодировки символов Unicode, в которой каждый символ представляется не одним, а двумя байтами. Кодировка Unicode предназначена для индексации символов нескольких алфавитов одновременно. Строковые типы данных, доступные в Delphi, описаны в табл. 2.3.
Тип ShortString введен для обратной совместимости с Pascal под DOS и не рекомендуется для использования. Переменной, описанной с использованием устаревшего типа String, назначается тип ShortString, если при компиляции директива н находится в выключенном состоянии: {$н-}, или Ansistring, если при компиляции директива н находится во включенном состоянии: {$Н+}.
Для больи;;::-: Unicode) д.:я вать тип я.-5:
Строковые типы данных в Delphi
Таблица 2.3
Название типа |
Максимальная длина, символов |
Занимаемая память |
Размер символа, байт |
ShortString |
255 |
От 2 до 256 байт |
1 |
AnsiString |
|
От 4 байт до 2 Гб |
1 |
WideString |
|
От 4 байт до 2 Гб |
2 |
Для большинства случаев (не связанных с использованием кодировки Unicode) для описания строковых переменных рекомендуется использовать ТИП AnsiString.
2.1.3. Другие стандартные типы данных
Работа с другими типами данных, предусмотренными в Delphi, не отличается от использования аналогичных типов данных в Pascal.
Например, вместо одного логического типа данных в Pascal, в Delphi существует целых четыре: Boolean, ByteBool, WordBool и LongBool. Такое разнообразие типов предусмотрено для обеспечения совместимости с другими языками программирования и средами выполнения. Как видно из их названий, они отличаются друг от друга только размером, и без особой необходимости нет смысла в использовании для описания логических переменных какого-либо другого типа вместо обычного Boolean.