Выпуск 02: Консольные приложения

 
     

Архив рассылки

Для тех, кто недавно подписались: сначала прочтите первые два выпуска, которые находятся в архиве рассылки.

Также повторю, что эта рассылка в основном преднозначена для тех, кто ещё не программировал ВООБЩЕ или очень мало, но хотят научиться создавать OpenGL приложения. Так что "нормальный" программист в самом начале рассылки ничего нового не найдёт. :)

Проекты Delphi.

Delphi для каждой программы создаёт проект. Он состоит из нескольких файлов: главный файл проекта (*.dpr), файл с описанием интерфейса формы (*.dfm) и файл , в котором хранится весь код (*.pas). Есть и другие файлы, но эти 3 самые главные! Если не хватает хоть одного - программа не запустится. Чтобы открыть проект надо выбирать файл *.dpr, а сохраняются *.dpr и *.pas. Файлы, у которых расширения начинаются с тильды (~) - запасные копии. После компиляции проекта (из кода создаётся готовая программа) в той же самой папке (с проектом) создаётся файл с расширением *.exe. Это и есть ваша программа. :)

Совет: для каждого проета создавайте отдельную папку.

Чтобы сохранить весь проект, выберите File->Save All. Первым сохраняется файл с расширением *.pas. Ему названия менять не обязательно. Второй файл - сам проект. Его название совпадает с названием программы (в визуальной среде), так что выбирайте правильное название (должно начинаться с буквы и не может содержать пробелы, используются только латинские буквы!) :)

Продолжаем.

В прошлом выпуске мы познакомились с визуальной средой программирования Delphi и создали первую программу - медиаплеер. Но таких примеров, т.е. таких программ мы делать почти не будем! Главная цель - OpenGL графика. И работать мы будем в другом интерфейсе.

Вся наша работа будет происходить в редакторе кода. Может вам сначала покажется, что это очень не удобно, но это совсем не так! Я уверен, что вы полюбите :) редактор кода и часто будите избегать визуального программирования.

Я знаю, что многие из вас не знают почему будем "тусоваться" :) в редакторе кода, когда на много удобнее работать с визульной средой, т.е. с готовыми компонентами и другими удобствами. :) Ну, насчёт удобств я отрицать не буду. Но в таких программах есть и свои минусы:

  1. Размер. Сохраните проект с вашим медиаплеером и его откомпилируйте. Чтобы создать программу (откомпилировать) просто запустите проект (вы уже знаете как это делается), или, чтобы сразу не включать программу - выберите в меню Project->Compile <название_проекта>. Найдите в папке с проектом свою программу, <название_проекта>.exe. Проверьте сколько места он занимает! 300? 400 Кб? :) А в невизуальной среде сделана программа бедет занимать 30 Кб! :)

  2. Скорость. В готовых компонентах (и в форме) есть куча ненужных вещей, которые вы не используете и которые загружают компьютер, а также действуют медленно.

Это две главные причины (а их на самом деле больше!). Так, что скажите? Передумали с визуальной средой? :) Но, конечно не будет так жестоко! :) Для начала примеры буду приводить используя именно эту среду. ;)

Ваш будущий друг.

Я всё говорю о редакторе кода и пришла пора с ним по ближе познакомится. :)

Откройте Дельфи, или, если она открыта, закройте проект (File->Close All). Теперь создадим проект консольного приложения. File->New->Other... и из списка выберите Console Application. Нажимаем OK. Сразу сохраните проект. Заметьте, что у консольного приложения в проекте находится только один из 3 главных файлов (*.dpr)! А другие и не нужны, поскольку у нас нету формы. Перед вами должно появится окно редактора кода со странными строчками:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
end.

И на самом деле половина строчек не нужна! :) Первая строчка - имя проекта. Теперь стерайте ненужные строчки, чтобы остались только эти:

{$APPTYPE CONSOLE}

begin

end.

Сократилась программа? :) Ну, теперь можно начинать объяснения. :)

Первая строчка определяет тип приложения (сокращение от Application Type - Console). В OpenGL проектах она нам будет не нужна, но сейчас без неё программа просто не будет работать! :)

begin и end. - логические скобки, т.е. блок программы, в котором будут выполнятся разные действия. Слово begin открывает скобки, а end. - закрывает. Не забудьте поставить точку в конце!

"Hello, World!"

Пора сделать первую консольную программу. Между командными скобками вставьте следующий код:

Write('Hello, World!');

Эта команда выведет на экран надпись Hello, World!. В конце каждой команды (begin - не команда) должна стоять точка с запятой (называемый пустой оператор).
Вывод строки осуществляет команда (функция) Write() (от ангийского - писать). В скобках указывается аргумент, требуемый для этой команды. А точнее - строка, выводимая на экран. Строки записываются между одинарными кавычками (апострофами). Если надо написать "пустую" строку, будем соответственно делать так:

Write('');

или

Write;

Никогда не забывайте пустых операторов!

Запустите приложение (F9). И что увидели? Почему-то мне кажется, что ничего! :) Может где нибудь ошибка? На самом деле с программой всё в порядке! Она включилась, вывела на экран надпись и закрылась. Так и должно быть. Но от такой программы никакого толку нету. Зачем всё это писать, чтобы ничего не увидеть? :) И действительно - незачем! :) Значит надо как нибудь программу задержать.

После функции Write вставьте следущюю строчку:

ReadLn;

Эта строчка заставит программу задержаться. Она преднозначена для получения данных с клавиатуры (сокращение от английского Read Line). Данные считаются полученными, когда пользователь нажмёт клавишу ENTER. Теперь ваша программа выглядит так:

{&APPTYPE CONSOLE}

begin
 Write('Hello, World!');
 ReadLn;
end.

Запустите программу. Теперь всё в порядке? :) Чтобы выйти из программы и вернутся в Дельфи, нажмите ENTER.

Эта была ваша первая консольная программа. :)

Стиль записи.

Эту программу можно записать и так:

begin write('Hello, World');readln;end.

Ошибки не будет. Код короче, но выглядит ужасно! Каждый себя уважающий программист каждую функцию будет начинать с новой строки. :) Вы же не будете писать письма снизу вверх? :) Но такая запись будет не правильной:

begin
 Write('Hello,
      World!');
 ReadLn;
end.

Строка не может быть разделена! Попробуйте запустить такую программу. Появится кое что ужасное! :)

Смотреть

Ужасное - это только на первый взгляд. На самом деле Дельфи сообщает нам об ошибке. Выделенная строка - та строка, в которой находится ошибка, описанная внизу. В этом случае - Unterminated string. Это означает незаконченую строку. В строчке Write('Hello, нету знака, который заканчивает строку Hello,. Теперь выберите вторую ошибку из списка. Два раза щёлкните на ней. Красным цветом пометится следущая строка. Ошибка гласит: ',' or ')' expected, but 'World' found. Это значит, что после первой строки надо поставить один из данных знаков. Только ничего не ставьте! :) Лучше переключитесь к следущей ошибке. Она говорит, что перед функцией ReadLn не хватает точки с запятой. А почему выделилась именно эта строка? Потому, что выделяется строка ПЕРЕД которой надо ставить точку с запятой. Такая запись будет правильной:

begin
Write('Hello, World!')
;
ReadLn
;end.

Можете запустить программу и проверить, если не верите. :) Все ошибки должны исчезнуть. Просто, не так ли? :) Если у вас хорошо, или не плохо развита логика, то вы заметите, что чем дальше - тем легче, потому что появятся новые, более удобные способы решения задачь. Я это давно заметил. :) А чтобы развивать логику нужна практика! И именно по этому я буду вам иногда давать разные задания!

Так вот. :) Задание #1 так сказать. :) Напишите текст, несколько раз используя функцию Write(). А потом замените её на WriteLn() и решите когда удобнее использовать одну, или другую функцию.

На сегодня хватит. :)
 

2005-09-29

Автор, ведущий и дизайнер рассылки: Евгений Нарышкин (spider3d@yandex.ru)

OpenGL для начинающих (under construction): http://spider3d.narod.ru/

Хостинг от uCoz