- •Модуль и его структура
- •Структура модуля
- •Список uses
- •Интерфейс
- •Реализациия
- •Инициализация и завершение
- •Ключевые слова
- •Слово const
- •Слово var
- •Комментарии
- •Слово type
- •Переменные
- •Типы данных и переменные
- •Преобразование типов
- •Знаки операций
- •Массивы
- •Одномерные массивы
- •Многомерные массивы
- •Функции Low и High
- •Динамические массивы
- •Короткая строка
- •Длинная строка
- •Расширенная строка
- •Строка с терминальным нулем
- •Операции со строками Слияние
- •Извлечение символа
- •Управляющие символы в строках
- •Разбиение литерала по строкам программы
- •Сравнение строк
- •Строковые функции
- •Форматирование строк
- •Множества
- •Объявление записи
- •Оператор with
- •Массивы записей
- •Совместимость типов данных
- •Указатели
- •Статические и динамические переменные
- •Размещение динамических переменных
- •Разыменование указателя
- •Управление вычислениями Операторы if, then, else
- •Выполнение нескольких инструкций.
- •Вложенные условия.
- •Циклы Элементы структуры цикла
- •Цикл for…
- •Функции Pred и Succ
- •Цикл while
- •Цикл repeat
- •Управление циклами
- •Оператор goto
- •Оператор case
- •Область видимости идентификаторов
- •Подпрограммы
- •Процедуры и функции
- •Объявление и определение подпрограммы
- •Параметры подпрограмм
- •Локальные процедуры и функции
- •Перегрузка подпрограмм
- •Параметры по умолчанию
- •Включение внешнего файла в модуль
Параметры по умолчанию
Любая процедура или функция может иметь параметры, значения которых заданы «по умолчанию». При вызове такой процедуры или функции соответствующие фактические параметры можно опустить.
Рассмотрим пример подпрограммы с параметром по умолчанию:
// Объявление процедуры с параметром
// EraseFirst, который по умолчанию имеет значение false.
procedure Redraw(EraseFirst : Boolean = False);
// описание процедуры
procedure Redraw(EraseFirst : Boolean);
begin
if (EraseFirst) then begin
{ код стирания изображения }
end;
{ код рисования изображения }
end;
Процедуру Redraw можно вызвать без фактического параметра. В такой ситуации на место отсутствующего фактического параметра компилятор подставит значение по умолчанию. Так, следующие строки кода по смыслу идентичны:
Redraw;
Redraw(False);
При объявлении функций и подпрограмм обычные параметры должны предшествовать параметрам по умолчанию:
{ Объявление функции воспроизведения звукового файла}
function PlayWaveFile(Name : string; Loop : Boolean = False;
Loops : Integer = 10) : Integer;
{ Вызовы попрограммы PlayWaveFile }
R := PlayWaveFile('chime.wav'); { не надо повторять звук }
R := PlayWaveFile('ding.wav', True); { проиграть 10 раз }
R := PlayWaveFile('bell.wave',True, 5); { проиграть 5 раз }
Включение внешнего файла в модуль
Подключаемый файл – это обычный текстовый файл, содержимое которого необходимо «подставить» в нужное место модуля. Обычно в таких файлах размещают объявления констант, директивы компилятора или фрагменты кода, которые используются и в других модулях проекта. Иногда бывает удобно вынести в отдельный файл часть отлаженного кода, чтобы уменьшить объем текста, видимого в редакторе. Внешний файл автоматически включается в текст модуля при компиляции с помощью специальной директивы. Для имени подключаемого файла рекомендуется расширение .INC.
Допустим, что внешний файл должен содержать код, показанный на листинге 2.2
Листинг2.2. Файл TEST.INC.
const
DefWidth = 500;
DefHeight = 300;
type
TCDRecord = record
Number : integer; // Порядковый номер CD в коллекции
Title : string; // Наименование
Artist : string; // Исполнитель
Year : integer; // Год выпуска
Recorded: string; // Фирма-производитель
Price : double; // Стоимость
Market : string; // Где куплен
end;
Чтобы создать включаемый файл, в главном меню Delphi надо выбрать File | New и затем дважды щелкнуть на пиктограмме Text диалога New Items. В результате откроется чистая страница редактора кода. Введите текст и сохраните файл под любым именем, выбрав в меню File | Save As. . .. Не забудьте при этом задать расширение имени INC, – иначе по умолчанию будет принято расширение TXT.
Чтобы включить внешний файл в текст модуля, необходимо воспользоваться директивой компилятора $I так как это показано в следующем примере:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes,StdCtrls;
{$I Test.inc}
{ ... остальной текст модуля }
Директива $I дает указание компилятору взять исходный текст из файла TEST.INC и заменить им саму директиву. Можно считать, что действие директивы $I подобно копированию фрагмента текста из одного файла в буфер обмена и вставке содержимого буфера в результирующий файл.
Необходимо следить чтобы включаемый файл был синтаксически корректным. В противном случае компилятор зафиксирует ошибку.
