Стандартные типы данных
Структуры данных в Delphi
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 | От 2 до 256 байт | ||
AnsiString | От 4 байт до 2 Гб | ||
WideString | От 4 байт до 2 Гб |
Для большинства случаев (не связанных с использованием кодировки Unicode) для описания строковых переменных рекомендуется использовать ТИП AnsiString.
2.1.3. Другие стандартные типы данных
Работа с другими типами данных, предусмотренными в Delphi, не отличается от использования аналогичных типов данных в Pascal.
Например, вместо одного логического типа данных в Pascal, в Delphi существует целых четыре: Boolean, ByteBool, WordBoolи LongBool.Такое разнообразие типов предусмотрено для обеспечения совместимости с другими языками программирования и средами выполнения. Как видно из их названий, они отличаются друг от друга только размером, и без особой необходимости нет смысла в использовании для описания логических переменных какого-либо другого типа вместо обычного Boolean.