Основы Object Pascal (551739), страница 2
Текст из файла (страница 2)
Допустим, что имеется несколько значений, которые будут встречаться в программе много раз. Возможно, эти значения понадобятся другой программе. Тогда их можно (и нужно!) объявить как константы. В качестве примера добавим раздел констант к тексту модуля на листинге 1.3. Один раздел констант поместим в интерфейсную секцию модуля, а другой – в секцию реализации. Константы, объявления которых находятся в интерфейсной секции модуля, будут доступны в других модулях. Константы, объявленные в секции реализации, доступны только в данном модуле. На листинге 1.4 показан модуль с двумя разделами объявления констант.
Константы AppCaption, EarthMeanRadius, EarthGravitation, объявленные в интерфейсной секции модуля Unit2, могут быть в будущем использованы в любом из модулей, который в своем uses – списке содержит имя Unit2.
Константы, обозначенные идентификаторами BaseX и BaseY, будут доступны только в данном модуле, поскольку их объявления размещены в секции implementation.
Ключевое слово const используется и других контекстах исходного кода. Об этом – в разделе «Переменные, константы и параметры–переменные».
Листинг 1.4. Разделы объявления констант в модуле |
unit Unit2; interface const AppCaption = 'My Cool Program 1.0'; EarthMeanRadius = 6371.21; {km} EarthGravitation = 0.398603e6; {km^3/s^2} procedure DoSomething; implementation const BaseX = 20; BaseY = 200; procedure DoSomething; begin { Здесь должен быть код процедуры DoSomething. } end; end. |
Ключевое слово type
Новый термин: Ключевое слово type используется для объявления нового типа данных.
Объявление нового типа данных – изощренная технология программирования, суть которой на данном этапе объяснить трудно. Все же, давайте рассмотрим пример. Допустим, что для хранения данных в некоторой программе необходима коллекция величин (массив), каждый элемент которой имеет размер в один байт, а общее количество элементов равно 20. Если ссылки на подобный массив в программе будут встречаться часто, можно (и нужно!) объявить новый тип данных. В данном случае объявление нового типа данных имеет вид
type
TMyArray = array [0..19] of Byte;
Теперь любой контекст вида «array [0..19] of byte» можно будет заменить словом TMyArray. Далее мы увидим много примеров использования объявлений типов данных.
Ключевое слово var
Новый термин: Ключевое слово var обозначает секцию модуля, в которой объявляются переменные.
Ключевое слово var используется для объявления переменных (понятие «переменная» подробно рассматривается в разделе «Переменные»). Секции объявления переменных могут присутствовать в модулях, в процедурах и в функциях. В модуле может быть несколько секций объявления переменных.
На листинге 1.5 показан текст модуля с секциями объявлений типов и переменных.
Листинг 1.5. Модуль с объявлениями типов и переменных |
unit Unit2; interface type TMyArray = array [0..19] of Byte; TMyOrbit = record A,e,u,w,i,O : real; end; const AppCaption = 'My Cool Program 1.0'; EarthMeanRadius = 6371.21; {km} EarthGravitation = 0.398603e6; {km^3/s^2} var X : Integer; MyArray : TMyArray; MyOrbit : TOrbit; procedure DoSomething; implementation const BaseX = 20; BaseY = 200; procedure DoSomething; begin { Code for DoSomething goes here. } end; end. |
ПРИМЕЧАНИЕ: Начало секции объявления типов, констант или переменных идентифицируется одним из ключевых слов var, const, или type. Окончание секции – перед следующим ключевым словом
Комментарии
Комментарий – это текст, который объясняет назначение того или иного фрагмента программы. Комментарии к программе можно рассматривать как один из способов документирования программного обеспечения.
Вот примеры комментариев к программе:
{
SPACE SYSTEM TOOLBOX 1.0
Copyright (c) Moscow State Aviation Institute 1998–2000
}
{ Cоздаем объект – систему ГЛОНАСС}
{ Не забыть освободить выделенную здесь память! }
GLONASS := TGLONASS.Create;
{ Освобождаем память }
GLONASS.Free;
(* Исправить ошибки в этом месте модуля *)
Имеется несколько способов комментирования. Наиболее типичным является использование фигурных скобок. Открывающая фигурная скобка начинает комментарий, а закрывающая – заканчивает. Другой способ использует символы (* как начало, а символы *) – как окончание комментария. Различие этих двух способов состоит в том, что с помощью символов (*/*) можно «заблокировать» фрагменты текста, которые содержат комментарии. Итак, два вида символов позволяют написать от одной до нескольких строк комментария к тексту программы.
ПРИМЕЧАНИЕ: Фигурные скобки в языке Pascal также используются для задания директив. В тексте директивы сразу за открывающей фигурной скобкой следует знак доллара. Например, чтобы дать компилятору указание отменить вывод диагностических сообщений, в исходный код программы надо поместить строку:
{$HINTS OFF}
Когда компилятор встречает в тексте программы такую строку, он прекращает генерацию диагностических сообщений до тех пор пока не обнаружит директиву {$HINTS ON}. Директивы мы будем рассматривать далее по мере необходимости.
Третий способ комментирования – использование пары символов //. Часто это называют «комментарий в стиле C», ибо так принято в языках С и С++. Данный тип комментария допустим во всех версиях Delphi старше первой.
ПРИМЕЧАНИЕ: Рекомендуется использовать комментарии в фигурных скобках для документирования программы, т.е. того текста, который вы сдаете заказчику. Для блокирования фрагментов кода в процессе отладки используйте С-стиль комментариев или (*/*). А вообще-то это дело вкуса.
Компилятор игнорирует все комментарии. Если вы используете стандартные параметры настройки Delphi, все строки–комментарии будут выделены курсивом синего цвета. Это позволяет быстро находить комментарии в программе.
ПРИМЕЧАНИЕ. Если вы – член коллектива, работающего над большим проектом, то вам наверняка придется читать тексты, написанные коллегами по работе. В свою очередь, кто–то будет разбираться в тексте, который написали вы. Исчерпывающие комментарии к программе помогут сэкономить часы работы любого программиста, который должен сопровождать чужой программный продукт. Даже если вы работаете «на себя», комментирование кода – отличный стиль программирования. вы удивитесь, как быстро забывается, зачем вы написали тот или иной код. Исчерпывающие комментарии в программе позволят Вам не тратить понапрасну время на восстановление в своей памяти «что к чему».
Переменные
Прежде чем использовать в программе переменные их надо объявить. Объявления переменных размещаются в секции модуля, которая идентифицируется словом var . Например,
var
X : Integer; { переменная X объявлена как целочисленная }
Y : Integer; { переменная Y объявлена как целочисленная }
Ранее мы обсудили использование ключевого слова var в терминах модуля. Так, было сказано, что все переменные, используемые в модуле, должны быть объявлены в var–секции. Это действительно так, но вы можете иметь секцию объявления переменных и внутри процедуры, и внутри функции.
Вот пример объявления переменных в процедуре:
procedure TForm1.Test;
var
S : string;
begin
S := 'Hello World!';
Label1.Caption := S;
end;
Объявленную переменную можно использовать в программе для хранения и модификации данных. Рассмотрим несколько примеров. В следующем фрагменте кода используются переменные X и Y, объявленные ранее. Комментарий в конце каждой строки кода поясняет то, что произойдет при выполнении этого кода:
X := 100; { 'X' принимает значение числа 100 }
X := X + 50; { 'X' теперь содержит значение 150 }
Y := 150; { 'Y' содержит значение 150 }
X := X + Y; { 'X' содержит значение 300 }
Inc(X); { Приращение. 'X' теперь содержит значение 301 }
Переменная это область (ячейка) памяти компьютера, которая хранит некоторое значение.
Дадим ряд пояснений к этому коду.
Во–первых, надо ясно понимать, что значение переменной X изменяется только в результате той или иной операции над ней. (Предусмотренные языком Object Pascal операции, функции и процедуры для манипуляции переменными мы рассмотрим позже). Здесь мы видим, что переменным можно присваивать значения, складывать, давать приращение и т.д.
Во–вторых, обратите внимание на то, что каждый сегмент кода заканчивается символом «; ». Символ «точка с запятой» используется как символ окончания фразы, выраженной на языке Pascal. Законченные фразы, которые вы пишете на языке Pascal, называются операторами.
ПРИМЕЧАНИЕ. С незапамятных времен, подающий надежды программист обязан был выучить, в чем разница между выражением (expression) и оператором (statement). Официальное определение понятия «оператор» гласит: оператором называется любое выражение, за которым следует символ «; ». Выражением называется единица кода, которая вычисляет некоторое значение. Рассмотрим следующий оператор:
c := a + b;
В этом примере фрагмент кода справа от знака присваивания (:=), т.е. a + b, есть выражение. Вся строка целиком – оператор. Можно сказать, что выражение – это часть оператора. Один оператор может содержать несколько выражений. Возможно, сейчас это все же остается запутанным, но вскоре все прояснится. Сейчас просто запомните: оператор заканчивается «точкой с запятой» . (Существуют ситуации когда «точка с запятой» в конце оператора не ставится. Такого рода исключения из общих правил будут оговорены особо).
Имена переменных должны удовлетворять правилам построения идентификаторов. Идентификаторы используются также для именования функций, процедур, полей в записях, модулей и других объектов программы. В идентификаторах можно использовать строчные или заглавные буквы английского алфавита, цифры и символ подчеркивания (_). Идентификатор не может содержать ни пробелов, ни специальных символов. Первым символом идентификатора должна быть либо буква, либо символ подчеркивания. Количество символов в идентификаторе не ограничено, но все, что следует после 255-го символа, – игнорируется. Практически же все что длиннее 20 символов, вряд ли полезно. Вот примеры допустимых имен переменных:
aVeryLongVariableName : Integer; { «длинный» идентификатор }
my_variable : Integer; { идентификатор с подчеркиванием }
x : Integer; { одиночный символ в качестве имени }
X : Integer; { это то же самое имя что и предыдущее }
Label2 : string; { имя содержит цифру }
ПРИМЕЧАНИЕ. Язык Pascal не чувствителен к регистру. (т.е. не чувствует разницу между строчными и прописными буквами). Так, в следующих операторах используется одна и та же переменная:
var
XPos : Integer;
{ ...далее }
XPos := 20;
XPOS := 200;
xpos := 110;
XpoS := 40;
Если раньше вы имели дело с языком, который различает заглавные и строчные буквы (C или C++), нечувствительность Object Pascal к регистру может показаться странной, но скоро вы привыкните и к этому.