Типы данных в Delphi

Язык Delphi базируется на известных по языку Turbo Pascal простых типах данных: целых, вещественных, символьных и логических. Однако в нем появились новые имена типов, а некоторые типы получили другие диапазоны допустимых значений. Характеристики типов даны далее.

Таблица целых типов

Тип VCL Win32 Диапазон значений Память, байт
Byte 0…255
Word 0…65535
Longword 0…4294967295
Cardinal 0…4294967295
Shortint -128…127
Smallint -32768…32767
Integer -2147483648… 2147483647
Longint -2147483648…2147483647
Int64 -263…263-1

 

Для целых типов наивысшую производительность обеспечивают Integer и Cardinal, для вещественных типов, представленных в следующей таблице, – тип Real, эквивалентный в этой версии языка типу Double. Наименьшее по абсолютной величине и наибольшее значения для типов Single, Double, Extended и Comp можно узнать с помощью констант модуля Math, имя которых начинается с Min или Max соответственно и продолжается именем типа, например MaxDouble – наибольшее значение в Double.

Таблица вещественных типов

Тип VCL Win32 Диапазон значений Память, байт
Single 1.5·10-45…3.4·1038
Real48 2.9 ·10-39…1.7·1038
Real 5.0 ·10-324…1.7·10308
Double 5.0 ·10-324…1.7·10308
Extended 3.4 ·10-4932…1.1·104932
Comp -263+1…263-1
Currency -922337203685477.5808… 922337203685477.5807

 

Для работы с логическими переменными предпочтительнее использовать тип Boolean. Символьные данные описывают с помощью родового типа Char. Можно также использовать типы AnsiChar и WideChar. Первый из них описывает символы, представленные в кодировке ANSI (Американский национальный институт стандартов), и требует одного байта для хранения символа; второй – в кодировке Unicode и требует двух байтов памяти. Тип Char является универсальным и позволяет перемещать код между различными видами приложений.

На основе простых типов в языке конструируются сложные типы, которые характеризуются способом организации отдельных компонентов в структуру. Основные языковые средства Turbo Pascal в отношении массивов, множеств и файлов сохранились, но получили определенное развитие, о чем будет сказано в контексте рассмотрения отдельных тем. Для описания строк символов используют следующие типы.

Тип строки Максимальная длина Память #0 в конце строки
ShortString ≤ 256 байт Нет
AnsiString ~ 2 Гб ≤ 2 Гб Есть
String ~ 2 Гб ≤ 2 Гб Есть или нет
WideString ~ 1 Гб ≤ 2 Гб Есть

 

Родовым для Delphi является тип String, но он имеет разный смысл в зависимости от типа приложения и директивы компилятора $H [1]. В приложениях VCL Win32 String по умолчанию интерпретируется компилятором как AnsiString – длинная строка с завершающим нулем (#0), а с директивой {$H-} – как тип ShortString (короткая строка без #0 на конце). Если при объявлении типа после слова String следует размер строки, например String[25], то, независимо от директивы компилятора, тип трактуется как строка с числом символов не более заданного (т.е. 25) и без #0 в конце. Короткую строку используют для обратной совместимости, а основными становятся строки с завершающим нулем. Переменная типа AnsiString является указателем на область в куче (Heap), где хранится строка. Там же хранятся длина строки и число ссылок на строку. Строки типа WideString состоят из символов Unicode. Этот тип совместим с типом BSTR, используемым для действий с объектами COM. К названным строкам применимы стандартные подпрограммы, имена которых и оказываемые действия известны из Turbo Pascal. Длина строки AnsiString в операциях присваивания отслеживается автоматически (символ #0 в длину не входит). Длину коротких и длинных строк можно изменять процедурой SetLength(stroka, NewDlina).

После изложения минимально необходимых сведений о типах данных перейдем к рассмотрению их использования в рамках приложений. При этом особое внимание уделим свойствам визуальных компонентов, поскольку именно они лежат в основе их применения.