Компонентный Паскаль/Hello, World
Первая программа
правитьПо старой доброй традиции, в каждом языке программирования первой программой является программа выводящая на экран строку "Hello, World!" ("Привет, мир!"). И здесь, прежде чем будет получен необходимый результат необходимо выполнить несколько служебных действий.
Создание файла с текстом программы
правитьДля этого необходимо выполнить следующие действия:
- Мышкой нажать меню "Файл"
- Выбрать пункт меню "Новый"
Либо тоже самое через стандартную комбинацию клавиш: <Ctrl>+<N> В итоге должно получиться окно примерно следующего вида:
Сразу нужно отметить, что файлы создаваемые в ББ имеют особую структуру. Поэтому открывать их в простом текстовом редакторе, там их редактировать и сохранять -- значит испортить такой файл. Дело в том, что ББ хранит в этих файлах служебные данные, необходимые для корректной работы Компонентного Паскаля.
Дополнительная информация необходима для корректной сборки программ. В качестве такой информации выступают дата и время редактирования файла, какие модули требуются для корректной работы и т.д. Компонентный Паскаль -- это язык промышленного программирования, за надёжность приходится платить вынужденным усложнением среды. Впрочем, едва ли когда-либо потребуется вмешиваться в работу среды.
Сохранение файла
правитьПри сохранении файлов в ББ это происходит по принятым правилам. Куча набросанных файлов в каталоге очень скоро будет вызывать вопросы, а что и к чему относится. Для избежания подобного бардака в ББ принята иерархия подсистем. По сути, это отдельная папка с особой структурой, в которой хранится вся необходимая информация этой подсистемы. Подсистема вполне может быть отдельным проектом.
Для правильного сохранения файла, необходимо выполнить следующие действия:
- Мышкой выбрать пункт меню "Файл"
- Далее выбрать пункт меню "Сохранить" (если файл новый -- будет запрошено имя файла) или "Сохранить как" (в любом случае будет запрошено новое имя существующего файла), либо использовать комбинацию клавиш <Ctrl+S>.
В появившимся диалоговом окне справа сверху есть кнопка для создания нового каталога. Вот его и нужно создать с именем "Test". Это будет наша подсистема.
Но этого ещё недостаточно. Мало создать такую подсистему, нужно ещё определить модуль программы в нужный подкаталог. Общепринятая практика сохранять текстовые файлы ББ в подсистеме в каталог с именем "Mod" (сокращение от "Module"). После этого, необходимо задать имя файла, например, "Hello". Расширение задавать необязательно, оно будет присвоено автоматически.
И если всё сделано верно в заголовке окна должна появиться надпись "(Test)Hello". Обратите внимание на то, как отделена в круглых скобках часть "Test" -- это как раз указание на то, что модуль "Hello" является частью подсистемы "Test". Точно также следует поступать и с остальными модулями.
Набор текста программы
правитьНабор текста осуществляется как и в любом текстовом редакторе. В ББ сделаны некоторые удобства по ускорению набора. Так например, достаточно нажать букву "m" и далее <F5>, и в текстовом редакторе будет отображена заготовка для буквы "m" (все эти заготовки можно настроить по своему вкусу, эта возможность описана во встроенной документации).
После получения шаблона необходимо посмотреть, что же нам выдал ББ.
- Ключевое слово MODULE задаёт имя модуля. Если имени модуля не будет, программа с точки зрения компилятора будет считаться с содержанием ошибки. Поэтому имя модуля нужно написать. И с учётом тех общепринятых требований что есть в ББ и Компонентном Паскале (КП), примем имя модуля TestHello.
- Ключевое слово IMPORT содержит имена модулей, которые будут использованы в ходе программы -- импортированы. Если модуль "Log" сейчас будет использован (для вывода служебных сообщений в рабочий журнал -- окно слева), то модуль "Math" -- пока не потребуется (он необходим для математических вычислений). Если какие-то модули будут содержаться после ключевого слова IMPORT, но не будут использованы -- ничего страшного не произойдёт. А вот если после IMPORT имени модуля нет, а он используется в тексте программы -- КП посчитает, что программа содержит ошибку.
- Ключевое слово BEGIN обозначает начало текста программы в модуле. Именно отсюда, при обращению к модулю ББ запускает выполнение действий, которое упомянуто после BEGIN.
- Ключевое слово END обозначает окончание блока инструкций (команд части программы). Но поскольку это ключевое слово с точкой -- у этого ключевого слова сейчас особый статус -- это конец модуля. Поэтому между END и точкой необходимо вставить пробел и дописать тоже самое имя модуля, что и после ключевого слова BEGIN -- TestHello.
Если всё сделано правильно текст программы должен выглядеть так:
Hello.odc
MODULE TestHello;
IMPORT Log, Math;
BEGIN
END TestHello.
Для преобразования нашей программы к исполняемому виду необходимо нажать комбинацию клавиш <Ctrl>+<D> (либо сделать это через меню "Разработка"->"Компилировать и выгрузить").
ББ задаст вопрос, поместить ли служебный файл в каталог "Sym". Необходимо согласиться. Каталог "Sym" выполняет служебную функцию, и вряд ли потребуется когда-либо программисту туда заглядывать. В этом каталоге создаются файлы с символическими ссылками на различные структуры текущего модуля, и при каждом преобразовании к машинному виду (компиляции) этот файл создаётся заново.
Последние штрихи
правитьПрограмма скомпилирована, в рабочем журнале выведен текст:
компилируется "TestHello" 4 0
Если бы были ошибки компиляции -- ББ вывел бы их в рабочий журнал. Первая цифра означает размер получившегося модуля. Всего 4 байта. Если кто-то программировал на Ассемблере под Windows, должен знать, что минимальный размер программы равен примерно 1500 байтам. Как это возможно, что программа занимает всего 4 байта? ))) Это Компонентный Паскаль!
Вторая цифра означает сколько байт отведено для связи с внешним миром. В нашем случае -- 0.
И всё же программа пока ничего не выполняет. Необходимо дополнить её до следующего вида:
Hello.odc (v.2)
MODULE TestHello;
IMPORT Log, Math;
PROCEDURE Start*;
VAR
BEGIN
Log.String('Привет, мир!');
Log.Ln
END Start;
BEGIN
END TestHello.
В этом варианте добавилось ключевое слово PROCEDURE. Пока не будем обращать на процедуру внимание, а обратим внимание на то, что она делает. Полезная работа процедуры Start начинается после ключевого слова BEGIN и заканчивается на "END Start;". В теле процедуры инструкция "Log.String" выводит заданную строку в скобках, а инструкция "Log.Ln" переводит позицию следующего печатаемого символа на новую строку (при этом сама она ничего не печатает). Если текст программы набран правильно, то после компиляции (<Ctrl>+<D>) в рабочем журнале будет добавлен следующий текст:
компилируется "TestHello"
Start теперь в символьном файле 32 0
Теперь наша программа занимает объём целых 32 байта! Но стоит и этот вариант несколько доработать. Дело в том, что модуль без объяснений зачем он создан, и как его использовать -- очень тяжело. поэтому в Компонентном Паскале предусмотрены комментарии. Дополним нашу программу необходимыми объяснениями:
Hello.odc (v.3)
MODULE TestHello;
(* это первая программа на языке
Компонентный Паскаль. Она ничего
толком не делает, кроме вывода строки
"Привет, мир!" *)
IMPORT Log, Math;
PROCEDURE Start*;
VAR
BEGIN
Log.String('Привет, мир!'); (*Вывод строки в Рабочий журнал(Log)*)
Log.Ln (*Переход на новую строку*)
END Start;
BEGIN
END TestHello.
Если программа скомпилирована без ошибок, то в рабочем журнале можно будет видеть, что размер программы остался те же 32 байта, и это правильно. Комментарии, заключённые между (* и *) никак не влияют на логику программы. Они нужны только программисту.
Получите и распишитесь
правитьКак же добиться исполнения программы? Для этого после текста программы необходимо вставить КОММАНДЕР. Это можно сделать двумя способами:
- Меню "Инструменты" -> пункт меню "Вставить коммандер"
- Одновременно нажать <Ctrl+Q>
И после появившегося круглого значка дописать:
TestHello.Start
Если всё получилось правильно окно текстового редактора должно выглядеть как на рисунке. При нажатии на круглый значок (КОММАНДЕР) произойдёт выполнение программы и в рабочем журнале появится текст:
Привет, мир!
Ну что же. Можно поздравить читателя, всё получилось)
Заключение
правитьВ этой части получены первые практические результаты:
- Создана подсистема
- Создан пустой модуль
- Правильно назван и сохранён модуль
- Получены первые знания по использованию главных ключевых слов
- Программа была скомпилирована
- Программа была снабжена комментариями
- Был использован КОММАНДЕР, и программа была исполнена.
Если в этой части есть непонятные места -- их можно дополнить своими мыслями, ведь это -- ВикиУчебник открытый для всех).