Главная » Delphi » Условные операторы

0

В этом  разделе операторы if и case языка  Object  Pascal  сравниваются с соот ветствующими конструкциями языков C и Visual  Basic. Предполагается, что  чита тель  уже знаком  с подобными операторами,  а потому  не  будем тратить время  на подробное объяснение их назначения и функционирования.

Оператор if

Оператор if (условного перехода) позволяет проверить, выполняется ли некоторое условие,  и, в зависимости от результатов этой  проверки, выполнить тот или иной  блок кода. В качестве примера ниже  приведены простейший фрагмент кода с использовани ем оператора if и его аналоги на языках C и Visual Basic:{ Pascal }

if x = 4 then y := x;

/* C */

if (x == 4) y = x;

‘Visual Basic

If x = 4 Then y = x

НА ЗАМЕТКУ

При наличии в операторе if нескольких условий поместите каждое из них в скобки.

Это сделает код, как минимум, более ясным и удобочитаемым. Например:

if (x = 7) and (y = 8) then

Избегайте записи, подобной следующей (поскольку компилятор поймет ее неправиль-

но):

if x = 7 and y = 8 then

В языке  Pascal ключевые слова begin и end (называемые также  логическими скоб ками)  используются аналогично фигурным скобкам  ({ и }) в языках  C и C++ для опре деления блока кода. Ниже  приведен пример использования подобной конструкции в операторе if:

if x = 6 then begin DoSomething; DoSomethingElse; DoAnotherThing;

end;

Конструкция if..else позволяет объединить проверку нескольких условий с ис

полнением нескольких блоков кода:

if x =100 then

SomeFunction

else if x = 200 then

SomeOtherFunction

else begin

SomethingElse;

Entirely;

end;

Оператор case

Оператор case в языке  Pascal подобен операторам switch в языках  C или C++. Он позволяет осуществить выбор  одного  варианта из нескольких возможных без исполь зования сложных конструкций, состоящих из нескольких вложенных операторов if..else if..else. Вот пример оператора case:

case SomeIntegerVariable of

101: DoSomething;

202: beginDoSomething; DoSomethingElse;

end;

303: DoAnotherThing;

else DoTheDefault;

end;

НА ЗАМЕТКУ

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

На языке  C этот пример выглядит так:

switch (SomeIntegerVariable)

{

case 101: DoSomeThing();

break;

case 202: DoSomething();

DoSomethingElse();

break;

case 303: DoAnotherThing();

break;

default: DoTheDefault();

}

Циклы

Цикл  (loop) представляет собой  конструкцию, которая позволяет выполнять по вторяющиеся действия. Циклы языка  Pascal во многом  подобны циклам  других  язы ков, потому не будем останавливаться на деталях  их построения и работы. В этом раз деле описываются все конструкции циклов, существующие в языке  Pascal.

Цикл for

Цикл  for идеален для организации повторения некоторых действий заранее оп ределенное количество раз. Ниже  приведен код цикла  for (хоть  и не слишком  полез ного), в котором к значению переменной X десять  раз прибавляется значение счетчи ка цикла I (далее следуют аналоги этого цикла на языках  C и Visual Basic).

var

I, X: Integer;

begin

X := 0;

for I := 1 to 10 do inc(X, I);

end.

На языке  C данный пример выглядит так:

void main(void) {

int x, i;

x = 0;for(i=1; i<=10; i++)

x += i;

}

На языке  Visual Basic этот пример имеет следующий вид:

X = 0

For I = 1 to 10

X = X + I

NextI

CОВЕТ

Начиная с версии Delphi 2 присвоение значений счетчику цикла в теле самого цикла не-

допустимо. Это связано с оптимизацией циклов в 32-разрядном компиляторе.

Цикл while

Цикл  while позволяет повторять выполнение блока  кода до тех пор,  пока  задан ное условие остается истинным. Условие  проверяется перед выполнением блока кода, поэтому  классическим примером использования данной конструкции является вы полнение некоторых действий с файлом (например чтение его данных), продолжаю щееся  до тех пор,  пока  не будет достигнут  его конец.  Ниже  приведен пример подоб ного  цикла,  в котором при  каждом  выполнении его тела одна строка файла  считыва ется и выводится на экран:

Program FileIt;

{$APPTYPE CONSOLE}

var

f: TextFile;       // Текстовый файл

s: string;

begin

AssignFile(f, ‘foo.txt’);

Reset(f);

while not EOF(f) do begin

readln(f, S);

writeln(S);

end;

CloseFile(f);

end.

Цикл  while языка  Pascal по своим свойствам не отличается от цикла  while языка

C и цикла Do..While языка Visual Basic.

Цикл repeat..until

Цикл  repeat..until выполняет ту же  задачу,  что  и цикл  while, но  несколько иначе. С его помощью блок кода выполняется до тех пор,  пока  заданное условие  не станет истинным; причем вначале выполняется блок  кода,  а уже затем проверяется истинность условия. Этот цикл аналогичен циклу do..while языка C.Вот пример такого цикла. Счетчик X будет увеличиваться до тех пор, пока его зна

чение не превысит 100:

var

x: Integer;

begin

X := 1;

repeat

inc(x);

until x >100;

end.

Процедура Break()

Вызов процедуры Break() внутри  цикла  while, for или repeat..until органи зует немедленный выход  программы из цикла.  Подобный метод  полезен в тех случа ях, когда во время  выполнения цикла возникло некоторое обстоятельство, требующее немедленного завершения его  выполнения. Эта процедура аналогична оператору break в языке  C и оператору exit в языке  Visual Basic. В следующем  далее  примере выполнение цикла прекращается после пяти итераций:

var

i: Integer;

begin

for i := 1 to 1000000 do begin

MessageBeep(0);                   // Подача звукового сигнала

if i = 5 then Break;

end;

end;

Процедура Continue()

Вызов процедуры Continue() прерывает выполнение тела цикла  и осуществляет переход к началу следующей  итерации, пропуская при  этом  все оставшиеся операто ры  блока.  В частности, в приведенном ниже  примере при  первой итерации второй оператор вывода строки выполнен не будет:

var

i: Integer;

begin

for i := 1 to 3 do begin

writeln(i, ‘. Before continue’); // До continue

if i = 1 then Continue;

writeln(i, ‘. After continue’);        // После continue

end;

end;

Процедуры и функции

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

Те, кто знаком  с языком программирования C или С++, могут рассматривать проце дуру языка  Pascal как функцию языка  С, возвращающую значение void. Функции  языка Pascal аналогичны остальным функциям языка С.

В  листинге 2.1  приведена  небольшая  программа,  в  которой  используются  проце

дура и функция.

Листинг 2.1. Пример использования процедур и функций

Program FuncProc;

{$APPTYPE CONSOLE}

procedure BiggerThanTen(i: Integer);

{ Выводит на экран сообщение, если I больше 10 }

begin

if I > 10 then

writeln(‘Funky.’);

end;

function IsPositive(I: Integer): Boolean;

{ Возвращает True, если I больше или равно 0 }

begin

if I < 0 then

Result := False

else

Result := True;

end;

var

Num: Integer;

begin

Num := 23;

BiggerThanTen(Num);

if IsPositive(Num) then

writeln(Num, ‘Is positive.’)

else

writeln(Num, ‘Is negative.’);

end.НА ЗАМЕТКУ

Локальная переменная Result (результат) функции IsPositive() имеет специаль-

ное назначение. В каждой функции языка Object Pascal существует локальная пере-менная с этим именем, предназначенная для размещения возвращаемого значения. Обратите внимание, в отличие от языков C и C++, выполнение функции не прекраща- ется при присвоении значения переменной Result.

1

 

Вернуть значение из функции можно присвоив его имени функции внутри кода самой функции. Это стандартный синтаксис языка Pascal, сохранившийся от его предыдущих версий. При использовании в теле функции ее имени будьте внимательны, поскольку существует принципиальное различие между использованием имени функции слева от оператора присвоения и использованием его в любом другом месте кода. Имя функ- ции слева от знака равенства означает присвоение функции возвращаемого значения, а имя функции в любом другом месте внутри кода функции привет к ее рекурсивному вызову!

Имейте в виду, что использование переменной Result недопустимо при сброшенном флажке  Extended   Syntax  (Расширенный  синтаксис),  расположенном  во   вкладке Compiler (Компилятор) диалогового окна Project Options, или при указании директивы компилятора {$X-}.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии