СТАТЬЯ 11.08.01

Предыдущая часть

Переход от Visual Basic к Delphi
Обзор для программистов и разработчиков

Митчел Ц. Керман
© 2000 Borland

Содержание части

Язык программирования

Язык программирования

В данном разделе описаны типы файлов, поддерживаемые Delphi, и синтаксис языка Object Pascal.

Типы файлов в Delphi

Как и в VB, Delphi-приложение (называемое проектом) состоит из нескольких различных типов файлов. В качестве трех основных типов файлов можно выделить файлы проектов, файлы блоков и файлы форм. Файл проекта (.DPR) является "основной программой"; он обращается к файлам блоков и файлам форм, составляющим проект Delphi. Таким образом, файл проекта связывает вместе все файлы, относящиеся к определенному проекту. Обычно файлы блоков и файлы форм присутствуют в проекте в соотношение один к одному, т.е. каждый файл блока имеет соответствующих файл формы и наоборот. Файл формы (.DFM) содержит объекты, входящие в форму, и установки свойств объектов, а файл блока (.PAS) содержит исходный код, связанный с формой. По сравнению с Delphi, в VB объекты, установки свойств и код содержатся только в файле формы (.FRM).

Помните, что вы должны сохранять как проект, так и формы для своего Delphi-приложения. При сохранении формы, файл блока и файл формы сохраняются под одним и тем же именем с соответствующими расширениями имени файла. Для сохранения формы, выберите File|Save or File|Save As… из горизонтального меню, щелкните мышью по значку Save на панели инструментов Standard или нажмите Ctrl-S. Для сохранения файла проекта, выберите File|Save Project As… из горизонтального меню. Для быстрого сохранения всех файлов, связанных с данным проектом, выберите File|Save All из меню или щелкните мышью по значку Save All на панели инструментов Standard.

Файл проекта

Еще раз хочу напомнить, что каждое приложение состоит из "основной программы", находящейся в файле проекта. Данный файл связывает вместе все блоки, относящиеся к данному приложению.

Ниже приведен общий синтаксис файла проекта:

program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run; end.

Как видно из приведенного выше синтаксиса, файл проекта состоит из трех элементов:

заголовка программы

оператор uses (необязательный элемент)

блок объявлений и операторов между зарезервированными словами begin и end

Заголовок программы задает имя программы. В операторе uses приведены файлы блоков, используемые программой. Блок (между зарезервированными словами begin и end) содержит объявления и операторы, исполняемые во время выполнения программы. Delphi IDE предполагает, что все эти три элемента находятся в одном файле проекта.

И, наконец, еще одно предупреждение: Советуем Вам не менять вручную код, генерированный IDE. Это относится не только к файлам проектов, но и к файлам блоков. Другими словами, позвольте IDE самой выполнять за вас работу. Например, если вы хотите добавить в проект новую форму, выберите File|New Form или щелкните мышью по кнопке New Form на панели инструментов View. Аналогично, чтобы добавить обработчик событий в файл блока, выберите объект и событие в Object Inspector для соответствующей формы, а затем введите имя для обработчика событий. Delphi автоматически генерирует заголовок и блок для обработчика событий.

Блоки

Delphi-блок состоит из типов данных (включая классы), объявлений констант и переменных, а также стандартных программ (функций и процедур). Каждый блок расположен в отдельном файле блока.

Файл блока состоит из заголовка, разделов интерфейса, реализации, инициализации и завершения. Разделы инициализации и завершения являются необязательными. Как и файл проекта, в конце файла блока должно стоять зарезервированное слово end с последующей точкой. Ниже приведен общий синтаксис файла блока:

unit Unit1;
interface
uses {содержит список использованных блоков}
const {содержит общедоступные константы}
type {содержит общедоступные типы}
var {содержит общедоступные переменные}
{содержит оставшуюся часть раздела интерфейса}
implementation
uses {содержит список использованных блоков}
const {содержит приватные константы}
type {содержит приватные типы}
var {содержит приватные переменные}
{ содержит оставшуюся часть раздела реализации}
initialization {содержит раздел инициализации}
finalization {содержит раздел завершения}
end.

Раздел интерфейса начинается с зарезервированного слова “interface” и продолжается до начала раздела реализации. Раздел интерфейса объявляет константы, типы данных, переменные и стандартные программы, доступные для клиентов (других блоков или программ), использующих блок, в котором они объявлены. Таким образом, любой объект, присутствующий в разделе интерфейса, является общедоступным, т.к. клиент может получить к нему доступ, как если бы данный объект был объявлен в самом клиенте.

Раздел реализации начинается с зарезервированного слова “implementation” и продолжается до начала раздела инициализации (если таковой имеется) или до конца блока. Раздел реализации объявляет константы, типы данных, переменные и стандартные программы, относящиеся только к данному блоку, т.е. все эти объекты являются приватными и недоступными для клиентов.

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

Разделы интерфейса и реализации могут содержать собственные операторы uses, которые должны располагаться непосредственно после заголовков разделов (зарезервированных слов “interface” и “implementation”). Оператор uses задает используемые блоки. Блок System используется автоматически каждым Delphi-приложением и не может быть явно задан в операторе uses. Блок System реализует стандартные программы для ввода и вывода файлов, обработки строк, операций с плавающей точкой, динамического распределения памяти и т.д. Другие блоки библиотеки стандартных программ, такие как SysUtils, должны быть включены в оператор uses. В большинстве случаев, Delphi устанавливает все необходимые блоки в оператор uses clause во время генерации и обслуживания исходного файла.

Имена блоков должны быть уникальными в пределах одного проекта. Даже если файлы блоков находятся в различных каталогах, в пределах одной программы нельзя использовать два разных блока с одинаковыми именами.

Элементы программирования

Теперь, когда вы уже знакомы с назначением и организацией типов файлов в Delphi, пора перейти к элементам программирования, т.е. к элементам, общим для большинства языков высокого уровня.

Комментарии

VB имеет два отдельных оператора комментария, оператор примечания (Rem) и апостроф ('). VB-компилятор всегда игнорирует оба эти оператора. В Object Pascal, комментарии также игнорируются компилятором, за исключением случаев, когда они выполняют функцию разделителей (разграничивающих смежные маркеры) или директив компилятора. Существует три способа построения комментариев:

{Текст между открывающей и закрывающей круглыми скобками является комментарием}

(* Текст между открывающей круглой скобкой с последующим символом ‘*’ и ‘*’ с последующей закрывающей круглой скобкой является комментарием *)

// Любой текст между двойной косой чертой и концом строки представляет собой комментарий

Комментарий, содержащий символ доллара ($) сразу же после открывающей скобки { или (* является директивой компилятора. Директивы компилятора представляют собой неисполняемые операторы в коде, изменяющие опции компилятора. Например, {$WARNINGS OFF} сообщает компилятору Object Pascal, что он не должен генерировать предупреждающие сообщения. В VB, оператор Option означает директиву компилятора.

Завершение оператора

В VB, оператор завершается в конце строки, если только не был установлен символ продолжения строки (символ подчеркивания), указывающий на продолжение оператора на следующей строке. Object Pascal не требует установки символа продолжения строки; т.е. оператор может располагаться на нескольких строках. Символ точка с запятой (;) является разделителем и ограничителем оператора; он отделяет один оператор от другого.

Идентификаторы

Идентификатор в Object Pascal обозначает константу, переменную, поле, тип данных, свойство, процедуру, функцию, программу, блок, библиотеку или пакет. Идентификатор может иметь любую длину, но только первые 255 символов являются значимыми. Первым символом идентификатора должна быть буква или символ подчеркивания. За ним может следовать любое количество букв, цифр и символов подчеркивания. Идентификаторы не могут содержать пробелы, а зарезервированные слова не могут использоваться в качестве идентификаторов.

Object Pascal не учитывает регистр; это означает, например, что идентификатор с именем FindItem может быть записан различными способами, как finditem, findItem, Finditem, или FINDITEM.

Типы данных

Тип данных задает, какой вид данных может содержать переменная. Встроенные типы данных для Object Pascal приведены в Таблице 1. В таблице представлен диапазон достоверных значений для каждого типа данных и требуемый для них объем памяти. Помните, что указанные типы данных применимы только для Windows-версии Delphi; Linux-версия не содержит тип данных Variant, он относится только к Windows.

Логические и численные типы данных

Таблица 1. Типы данных Object Pascal
Тип данных Диапазон Формат или размер Значимые цифры
Shortint от -128 до +127 8-битовое со знаком  
Smallint от -32768 до +32767 16- битовое со знаком  
Integer (or Longint) от-2147483648 до +2147483647 32- битовое со знаком  
Int64 от -263 до +263-1 64- битовое со знаком  
Byte от 0 до 255 8- битовое без знака  
Word от 0 до 65535 16- битовое без знака  
Longword (or Cardinal) от 0 до 4294967295 32- битовое без знака  
Boolean (or ByteBool) True или False 1 байт  
WordBool True или False 2 байта  
LongBool True или False 4 байта  
Real48 от 2.9 x 10-39 до 1.7 x 1038 6 байт от 11 до 12
Single от 1.5 x 10-45 до 3.4 x 1038 4 байта от 7 до 8
Real (or Double) от 5.0 x 10-324 до 1.7 x 10308 8 байт от 15 до 16
Extended от 3.6 x 10-4951 до 1.1 x 104932 10 байт от 19 до 20
Comp от -263+1 до +263-1 8 байт от 19 до 20
Currency от -922337203685477.5808 до +922337203685477.5807 8 байт от 19 до 20

Символьные и строковые типы данных

Тип данных Максимальная длина Требуемый объем памяти
Char (or AnsiChar) 1 ANSI -символ 1 байт
WideChar 1 Unicode -символ 2 байта
ShortString 255 ANSI-символов от 2 до 256 байт
String (or AnsiString) 231 ANSI-символов от 4 байт до 2 гигабайт
WideString 230 Unicode-символов от 4 байт до 2 гигабайт

Константы

Константа представляет собой именованный элемент, сохраняющий постоянное значение в течение выполнения программы. Она может быть определена любым математическим или строковым выражением. Во время компиляции, компилятор просто заменяет имя константы связанным с ней значением. Численные константы представляют число или числовой литерал, а строковые константы представляют строковый литерал. Число 7, например, является численной константой, а 'days per week' – строковой константой.

В Object Pascal, для определения констант используется оператор const. Как и аналогичный VB-оператор, оператор const может декларировать группу констант. Ниже представлена общая форма данного оператора:

Const

   constantName = Expression;
   [constantName = Expression;]

В вышеприведенном общем синтаксисе, квадратные скобки ([…]) используются для обозначения необязательных элементов, которые могут устанавливаться любое количество раз. Например, ниже приведен фрагмент кода, определяющий три константы:

Const

   MINS_PER_HR = 60;
   HRS_PER_DAY = 24;
   DAYS_PER_WK = 7;

В VB, эти же константы будут определяться с использованием следующего оператора:

Const MINS_PER_HR = 60, HRS_PER_DAY = 24, _DAYS_PER_WK = 7

Переменные

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

VB использует для объявления переменных оператор Dim (размерность), а Object Pascal использует оператор var. Ниже приведен общий синтаксис оператора var:

var
   variableName[, variableName]: DataType;
   [variableName[, variableName]: DataType;]

где DataType представляет заранее заданный или определенный пользователем тип данных. Рассмотрим в качестве примера следующие объявления VB-переменных:

Dim dollars As Integer, cents As Integer Dim cost As Double
Dim myMessage As String

В Delphi объявления аналогичных переменных будут иметь вид:

Var

   dollars:   Integer;
   cents:     Integer;
   cost:      Real;
   myMessage: String;

Операторы

В VB, знак равенства (=) представляет перегруженный оператор; он функционирует как оператор присваивания и как знак операции сравнения, обозначающий равенство. Однако в Object Pascal, знак равенства является только знаком операции сравнения, обозначающим равенство; он всегда сравнивает содержимое переменных для определения равенства. Оператор присваивания в Object Pascal представляет собой комбинацию из двух символов, двоеточия (:) с последующим знаком равенства (=), или :=.

Давайте рассмотрим фрагмент VB-кода:

Dim value1 As Integer, value2 As Integer Dim check As Boolean
value1 = 5 
value2 = 7 
check = (value1 = value2)

В данном фрагменте, value1 и value2 присваиваются два разных значения, 5 и 7 соответственно. Значение булевой переменной присваивается, исходя из того, равны ли значения value1 и value2. В данном случае, переменной check присваивается значение False, т.к. значения двух указанных переменных не равны. Эквивалентный код в Object Pascal будет выглядеть следующим образом:

var
   value1: Integer;
   value2: Integer;
   check: Boolean;
begin
   value1 := 5;
   value2 := 7;
   check := (value1 = value2); end;

Арифметические и реляционные операторы в Object Pascal представлены в двух таблицах. В Таблице 2 приведены арифметические операторы, а в Таблице 3 – операторы отношения. Операторы отношения в Object Pascal и VB одинаковы. Арифметические операторы также одинаковы, за исключением целочисленного деления, деления по модулю и возведения в степень. В Object Pascal, целочисленное деление, деление по модулю имеют встроенные операторы, а возведение в степень такового не имеет. Для выполнения операции возведения в степень программист должен вызвать функцию из math-библиотеки.

Таблица 2. Арифметические операторы Object Pascal
Операция Оператор Тип операнда Тип результата Example
Sign Identity + (unary) integer, real integer, real + x
Sign Negation - (unary) integer, real integer, real - x
Mutliplication * integer, real integer, real x * y
Division / integer, real real x / y
Integer Division div integer integer x div y
Modulo Division mod integer integer x mod y
Addition + integer, real integer, real x + y
Subtraction - integer, real integer, real x - y

Таблица 3. Операторы отношения Object Pascal
Оператор отношения Object Pascal Математика
Less than < <
Less than or equal to <= ?
Greater than > >
Greater than or equal to >= ?
Equal to = =
Not equal to <> ?

К логическим операторам в Object Pascal относятся and, or, not и xor. По умолчанию, Object Pascal выполняет укороченные вычисления and- и or-операций. Это означает, что он вычисляет только такую часть выражения, которая необходима для определения конечного значения. Для выполнения полного вычисления данных выражений, выберите Project|Options… и щелкните мышью по закладке Compiler. Затем щелкните мышью по "Complete boolean eval" во фрейме Syntax options. Или же, вставьте в свой код директиву компилятора {$B+}.

Как и в VB, единственной строковой операцией в Delphi является конкатенация строк (которая связывает строки вместе). VB поддерживает два различных, но взаимозаменяемых, оператора, выполняющих конкатенацию строк, амперсанд (&) и знак плюс (+). В Object Pascal, для конкатенации строк используется только знак плюс (+). Таким образом, знак плюс (+) является перегруженным оператором в Object Pascal; он используется для обозначения знака, сложения и конкатенации строк.

При разговоре о строковых операциях следует упомянуть еще об одном различии между VB и Object Pascal, касающемся символа разделителя строк. В VB, для разделения строк используются двойные кавычки ("), а в Object Pascal используются одинарные кавычки ('). Ниже приведен пример строки кода, в которой использованы строки и оператор конкатенации строк:

myName := 'Mitchell' + ' ' + 'Kerman';

Эта строка кода эквивалентна следующей:

myName := 'Mitchell Kerman';

Продолжение статьи будет опубликовано в течение недели

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Отправить ссылку на страницу по e-mail
Обсудить на форуме Inprise/Borland


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 11.08.01