
- •Глава 1
- •Структура модуля
- •Интерфейс
- •Реализация
- •Инициализация и завершение
- •Ключевые слова
- •Ключевое слово const
- •Ключевое слово type
- •Комментарии
- •Переменные
- •Типы данных и переменные
- •Преобразование типов
- •Знаки операций
- •Константы
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Функции Low и High
- •Динамические массивы
- •Короткая строка
- •Длинная строка
- •Операции со строками
- •Разбиение литерала по строкам программы
- •Строковые функции
- •Множества
- •Совместимость типов данных
- •Примечание.
- •Указатели
- •Статические и динамические переменные
- •Размещение динамических переменных
- •Разыменование указателя
- •Глава 2.
- •Вложенные условия. Операторы if могут быть вложены друг в друга произвольное число раз:
- •Элементы структуры цикла
- •Цикл for…
- •Цикл for с увеличением счетчика синтаксически определен как
- •Цикл for с уменьшением счетчика в общем случае имеет следующий вид
- •Функции Pred и Succ
- •Цикл while
- •Синтаксис цикла while имеет вид
- •Цикл repeat
- •Управление циклами
- •Оператор goto
- •Оператор case
- •Область видимости идентификаторов
- •Пример записи
- •Оператор with
- •Массивы записей
- •Подпрограммы
- •Процедуры и функции
- •Объявление и определение подпрограммы
- •Параметры подпрограмм
- •Локальные процедуры и функции
- •Перегрузка подпрограмм
- •Параметры по умолчанию
- •Глава 3
- •Анатомия класса
- •Наследование
- •Ключевые слова is и as
- •Что такое класс?
- •Анатомия класса
- •Указатель Self
- •Пример класса
- •Анализ объявления и реализации
- •Наследование
- •Перекрытие методов
- •Ключевые слова is и as
Типы данных и переменные
НОВЫЙ ТЕРМИН. В Object Pascal тип данных информирует компилятор как размещать информацию в памяти.
Некоторые языки программирования допускают присваивание переменной значения любого типа. Например, рассмотрим следующие примеры кода на языке BASIC:
X = -1;
X = 1000;
X = 3.14;
Интерпретатор BASIC заботится о выделении подходящего размера памяти для хранения соответствующего значения.
В программе на Object Pascal все переменные, используемые в программе надо объявить, например
var
X1 : Integer;
X : Integer;
Y : Double;
Z : Byte;
{ ...далее }
X1 := -1;
X := 1000;
Y := 3.14;
Z := 27;
Компилятор использует объявления переменных для проверки корректности присваиваемых им значений. Некорректность использования типов данных приведет либо к ошибке компиляции, либо к предупреждению, на которое следует обратить внимание, проанализировать и исправить ошибку. Строгий контроль за использованием типов данных обеспечивает надежность программы.
Некоторые из типов являются беззнаковыми, т.е. данные такого типа могут принимать только положительные значения. В таблице 1.1 приведены основные типы данных Object Pascal, размер памяти для размещения одного значения соответствующего типа, а так же диапазон допустимых значений. В этой таблице не представлены строковые типы, обсуждение которых вынесено в раздел «Строки»
Таблица 1.1. Типы данных Object Pascal
Тип |
Размер, байт |
Диапазон значений |
ShortInt |
1 |
-128 …127 |
Byte |
1 |
0 … 255 |
Char |
1 |
0 … 255 |
WideChar |
2 |
0 … 65 535 |
SmallInt |
2 |
–32 768 … 32 767 |
Word |
2 |
0 … 65 535 |
LongInt |
4 |
–2 147 483 648 … 2 147 483 647 |
Int64 |
8 |
от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
Integer |
4 |
см. LongInt |
Cardinal |
4 |
0 … 2 147 483 647 |
Single |
4 |
1.5 10-45 … 3.4 1038 |
Double |
8 |
5.0 10-324 … 1.7 10308 |
Real |
8 |
как Double |
Extended |
10 |
3.4 10-4932 … 1.1 104932 |
Comp |
8 |
от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
Currency |
8 |
от –922 337 203 685 477.5808 до 922 337 203 685 477.5807 |
Boolean |
1 |
True или False |
Variant |
16 |
|
Как следует из таблицы 1.1, типы Integer и LongInt эквивалентны. Это сделано для совместимости на уровне исходных текстов с программами, подготовленными на 16–разрядных компьютерах. На 16–разрядной версии тип Integer требует 2 байта памяти, а тип LongInt – 4 байта.
В 32-разрядной версии оба типа имеют размер 4 байта и, следовательно, одинаковые диапазоны значений.
Кроме того, можно заметить, что типы Int64 и Comp (computational) также имеют одинаковые диапазоны значений. Различие между ними в том как трактует их компилятор. Так, Int64 относится к целочисленным, а тип Comp – к вещественным. В инженерных приложениях тип Comp вряд ли Вам понадобится.
Далее, отметим идентичность типов Real и Double. В Delphi 1.0 (и в Turbo Pascal) тип Real был 6-байтным. Теперь он стал 8-байтным. Дело в том, что 6-байтный вещественный тип противоречит 32-разрядной архитектуре современных процессоров.
При переносе «старых» 16-разрядных программ на 32-разрядную платформу может возникнуть проблема совместимости по типу real. Так, если в Delphi – программе вы читаете с диска «старый» типизированный файл, объявленный как file of real, данные будут введены не верно. Для совместимости со «старым» типом real в Object Pascal есть тип real48, который соответствует 6–байтному вещественному числу.
ПРИМЕЧАНИЕ. Тип Int64 впервые появился в Delphi 4. Он предназначен для представления «очень больших» целочисленных значений. Его появление связано с тем, что объем жестких дисков далеко «перевалил» за гигабайт. В Windows API есть функция GetDiskFreeSpaceEx, которая вычисляет объем свободного пространства на жестком диске. Она может вернуть значение, которое гораздо больше верхней границы диапазона чисел типа Integer (2 147 483 647). Тип 64-битного целого и предназначен для решения подобных проблем.
Типы Single, Double, Extended, и Currency относятся к группе вещественных. К данным этого типа относятся числа, имеющие целую и дробную части. Каждое число вещественного типа может содержать конечное число десятичных цифр. Иначе данные этого типа называют числами с плавающей точкой.
Остальные типы данных относятся к целочисленным. Целочисленной переменной нельзя присвоить вещественное значение. Например, при компиляции следующего фрагмента будет зафиксирована ошибка:
var
X : Integer;
{ Далее... }
X := 3.75;
При написании кода программы, который отвечает за графический интерфейс, необходимость в переменных вещественного типа возникает очень редко.
С другой стороны, код реализации инженерных расчетов оперирует вещественными переменными на все 100%.