10 основных конструкций языка Delphi

10 основных конструкций языка Delphi

Самый простой ООП-язык для начинающих

Недавно мы рассказали про язык Delphi — где применяется, что интересного и где он востребован. Теперь перейдём к практике и посмотрим на Delphi изнутри — как он устроен и как на нём программировать. Возможно, уже через пару часов вы начнёте реализовывать свою мечту — писать собственную программу складского учёта. 

👉 Если вы проходили «Паскаль» в школе, то вы вряд ли узнаете что-то новое. В этом сила Delphi — это очень простой в освоении язык с поддержкой ООП и почти всех современных парадигм программирования.

В Delphi после каждого оператора ставится точка с запятой. Пропускать её нельзя — это будет ошибка и программа не запустится.

Комментарии

Чтобы поставить комментарий в Delphi, раньше использовали только фигурные скобки. Сейчас для комментариев кроме них можно ставить круглую скобку со звёздочкой или два слеша подряд, но с одной стороны:

{ Это комментарий }
(* Это тоже комментарий
на несколько строк *)
// А вот этот комментарий действует только до конца строки

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

{$RANGECHECKS OFF}

А так мы превратим нашу программу в консольную, чтобы вся работа шла в командной строке:

{$APPTYPE CONSOLE}

Переменные

Для описания переменной используют ключевое слово var:

var
        X: Integer;         // переменная целого типа 
        in, out: string;    // две переменных строкового типа 
        result: Double;     // переменная вещественного (дробного) типа

Без слова var сразу использовать переменную не получится: компилятор обязательно проверит, объявили ли вы её заранее или нет. Это сделано для контроля над оперативной памятью.

Ввод и вывод данных с клавиатуры

Чаще всего в Delphi делают программы с графическим интерфейсом, где есть поля ввода и кнопки. В этом случае данные получают оттуда, используя свойства разных компонентов. Но если нужно организовать ввод-вывод в консоли, то для этого используют такие команды:

write('Введите координаты X и Y: '); // выводим на экран строку
read(x,y); // считываем переменные x и y

После выполнения каждой команды курсор остаётся на той же строке:

write('Привет!');
write('Это журнал «Код».');
// на экране будет надпись в одну строчку и без пробела: Привет!Это журнал «Код».

Чтобы перенести курсор на новую строку после ввода или вывода, к команде добавляют в конец Ln:

 writeLn('Привет!');
    writeLn('Это журнал «Код».');
    // Привет!
    // Это журнал «Код».

Присваивание и сравнение

В отличие от большинства языков программирования, в Delphi оператор присваивания выглядит как двоеточие со знаком равно:

var x: integer;
...
x:=10;

Если вы видите в коде такое, то почти всегда это будет программа на Delphi или Pascal. Сравнение тоже выглядит не так как везде — одинарный символ равенства, как в математике:

:= ← присваивание

= ← сравнение

== ← а вот такого в Delphi нет

Остальные математические команды и операторы сравнения работают как обычно. Логические сравнения пишутся словами:

not ← НЕ

or ← ИЛИ

and ← И

Операторные скобки (составной оператор)

Во многих других языках границы функций, команд в условии и прочие границы обозначаются фигурными скобками, например в JavaScript:  function fn() {...}.

А вот в Delphi такие границы задаются отдельными словами begin и end и называются операторными скобками, или составным оператором. Они используются для обозначения границ подпрограмм и там, где язык разрешает ставить только одну команду. Чтобы обойти это ограничение, используют операторные скобки. Простой пример: 

if a > b then
begin
что-то полезное
end
else
begin
что-то другое полезное
end

Начало и конец основной программы тоже заключают в операторные скобки.

Условный оператор if

Классический оператор проверки условий, работает так же, как и в других языках:

if <условие> then
<оператор 1>
else
<оператор 2>;

Часть с else — необязательная, если она не нужна, то её можно не писать:

if <условие> then
<оператор 1>;

Так как после then можно ставить только один оператор, то, чтобы поставить больше, используют те самые операторные скобки:

if A > B then
    begin
        C := A;
        writeLn('Первое число больше второго');
        writeLn('Останавливаем проверку');
    end
else
    C := B;

Вкладывать условные операторы можно друг в друга сколько угодно.

Оператор множественного выбора case

Если нам нужно выбрать что-то одно сразу из нескольких вариантов, лучше использовать оператор выбора case, который работает так:

  1. Оператор получает переменную, с которой будет работать, и несколько вариантов её значений.
  2. Затем по очереди проверяет, совпадает ли очередное значение со значением переменной.
  3. Как только находится совпадение — выполняется соответствующий оператор, и case на этом заканчивается.
  4. Если ничего не совпало — то компьютер просто переходит дальше или выполняет то, что написано после else.

Вот как это может выглядеть в коде:

Write('Введите сегодняшнее число');
ReadLn(Day);
  case Day of // начинается оператор множественного выбора
    1..10: Writeln('Это начало месяца');
    11..20: Writeln('Это середина месяца');
    21..31: WriteLn('Это конец месяца');
    else Writeln('Нет такого дня недели');  // что мы делаем, если ничего не подошло
  end; // закончился оператор множественного выбора

Цикл с предусловием for

Особенность этого цикла в том, что мы в нём задаём не условие окончания, а чёткое количество шагов:

for <параметр цикла> := <значение 1> to <значение 2> do <оператор>;

Перевод:

for i := 0 to 99 do что-то полезное;

Логика такая:

  1. Нам нужно заранее объявить переменную цикла (написать как в JS let i = 1 — не получится).
  2. Этой переменной мы присваиваем начальное значение и указываем конечное.
  3. На каждом шаге цикла значение переменной будет автоматически увеличиваться на единицу.
  4. Как оно превысит конечное значение — цикл остановится.

Выведем числа от 1 до 10:

var I: Integer;
...
for I := 1 to 10 do Writeln(I);

Если нам нужно идти наоборот, в сторону уменьшения значения переменной, то вместо to используют downto:

var I: Integer;
...
// выведем числа в обратном порядке, от 10 до 1
for I := 10 downto 1 do Writeln(I);

Циклы с предусловием и постусловием

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

Цикл с предусловием — это когда сначала проверяется условие цикла, и если оно верно, то цикл выполняется до тех пор, пока оно не станет ложным. В общем виде такой цикл выглядит так:

while <условие> do
<оператор>;

Выведем с его помощью числа от 1 до 10 (обратите внимание на операторные скобки):

var I: Integer;
...
I:=1;
while I < 11 do
    begin
      writeLn(I);
      I++;
    end;

Цикл с постусловием работает наоборот: он сначала выполняет тело цикла, а потом проверяет условие. Операторные скобки в нём не ставятся, потому что границы цикла задаются самими командами цикла:

repeat
<оператор 1>;
...
<оператор N>;
until <условие>;

Если условие становится истинным — цикл останавливается. Особенность такого цикла в том, что он выполнится как минимум один раз, прежде чем проверится условие.

var I: Integer;
...
I:=1;
repeat
  writeLn(I);
  I++;
until I > 10

Процедуры

В Delphi есть отдельный класс подпрограмм, которые называются процедурами. Если сильно упростить, то процедура — это функция, которая не возвращает никакого значения. Процедуры удобно использовать для организации логических блоков, например в одну процедуру вынести приветствие пользователя, в другую — отрисовку интерфейса, в третью — отправку данных на сервер. Все процедуры обязательно должны быть объявлены до начала основной части программы. 

В общем виде объявление процедуры выглядит так:

procedure <имя> ( <список параметров, если они нужны> ) ;
const ...; // раздел констант
type ...; // раздел типов
var ...; // раздел переменных
begin // начало процедуры
<операторы>
end; // конец процедуры

Если какой-то раздел в процедуре не нужен, его можно пропустить. Сделаем процедуру, которая будет приветствовать пользователя и спрашивать его имя:

var name: string;
procedure hello;  // объявляем процедуру
begin
  writeln('Привет! Как тебя зовут? ');
  readLn(name);
end;

begin     // начало основной программы
  hello;  // вызываем процедуру
end.

В нашем примере имя пользователя попадёт в глобальную переменную name — доступ к глобальным переменным возможен из любого места программы.

Функции

Функции в Delphi работают точно так же, как и во всех остальных языках программирования. Единственное, о чём нужно помнить, — мы должны заранее определить, какой тип данных вернёт нам функция.

Для примера сделаем функцию возведения в степень: мы передаём в неё два числа, а оно возводит первое в нужную степень:

function power(x, y: double): double;       
begin
  result := Exp(Y * Ln(X)); // возвращаем результат работы функции
end;

begin // начало основной программы
  Writeln('5 в степени 6 равно ', power(5, 6)); 
  Readln; // ждём нажатия любой клавиши и выходим из программы
end.

Что теперь

Надевайте фланелевую рубашку, заваривайте чай в пакетике, подключайте мышку к порту PS/2 и садитесь программировать. Вам снова 16 лет, на завтра нет домашки, а в кармане свежая карточка на 500 мегабайт интернета.

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
[anycomment]
Exit mobile version