Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 [ 13 ] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

чение переменной $b истинно, следовательно выражение not $b - ложно. Истинность или ложность всего выражения еще не установлена, осталось нрове-рить значение переменной $с. Эта переменная имеет истинное значение, следовательно, и все выражение истинно, и оператор print выполняется.

Выше была описана особенность определения значения логических выражений,

которая состоит в том, что при первой же возможности установить истинность всего выражения, дальнейшие вычисления не производятся. Эта особенность имеет специальное название - короткозамкнутость логических выражений. Она позволяет программистам на Perl конструировать простые операторы управления процессом выполнения программы без логических операторов и даже вообще без оператора

$message=Переменные $а и ?Ь истинны.;

($а and $b) or $те8ваде="0дйа иш обе пфеменные $а иш $Ь ложны.";

В предыдущем примере, если одна из переменных $а или имеет значение Ложь, будет вычисляться правая часть оператора or, и значение переменной $message модифицировано. Если же обе переменные истинны, значение выражения or также будет истинно, поэтому правая часть оператора or не выполняется. В результате значение переменной $message не меняется. В этом примере использован побочный эффект кооператоров or и and для изменения значения переменной

Строго говоря, операторы [ и or не эквивалентны. Отличие состоит в том, что оператор [ имеет более высокий приоритет, чем or. Это означает, что при прочих равных условиях в выражениях в первую очередь будут выполняться операторы 11, аналогично тому, как в арифметических выражениях операции умножения выполняются перед операциями сложения. Данное замечание относится и к парам ss/and, и 1/nat, Однако для большей надежности используйте скобки, гарантирующие требуемый порядок вычисления выражения. ; .

Интересно то, что логические операторы не просто возвращают значение Истина или Они возвращают последнее вычисленное значение. Например, выражение 5 && 7 возвращает значение 7 (оно является истинным), поскольку в данном случае оно было вычислено последним. Такое свойство логических выражений позволяет использовать приведенные ниже конструкции.

♦ Пфеменной $nev присваивается старое значение,

♦ в случае истинности значения переменной Sold.

f в противном случае присваивается строка "default". $new=Sold j I "default";

Это выражение выглядит намного изящнее, чем следующее: $new=$old;

if {1 $Qld) { i Взи ЗЕВРетж $ald нэ спредзгетэ ипя jthhd? $new="default";

Циклит

В начале этой главы говорилось о том, что принятие решений и условное выполнение кода - не все, что может понадобиться от программы. Иногда еще нужно многократно выполнять некоторый фрагмент кода. Выше, в листинге 3.1, мы рас-

56 Ч1ь I. :Ei Perl



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

Организация циклов с оператором while

ЦИКЛЫ while считаются наиболее простыми. Оператор while повторяет блок кода до тех пор, пока некоторое выражение истинно. Вот синтаксис этого оператора:

while {выражение) БЛОК

Когда интерпретатор Perl встречает оператор while, проверяется выполнение условия. Если выражение истинно, выполняется БЛОК кода. После выполнения всего блока повторно вычисляется значение выражения, есл оно истинно, блок повторяется

(листинг 3.3).

ст 3.3. while

1: $counter=0;

2:йт11е ($counter<10 ) {

3: print "Выпопняется $counter maupoH цикла\п"; 4: $counter++; 5: }

Проведем анализ программы.

• Строка 1. Переменное nter присваивается нулевое значение.

• Строка 2. Вычисляется значение выражение nter < 10. Если оно истинно, выполняется блок кода.

• Строка 4. Значение переменное nter увеличивается на единицу.

• Строка 5. Фигурная скобка } закрывает блок, начинающийся в строке 2 с {. В этот момент Perl возвращается в начало цикла while и заново вычисляет выражение в круглых скобках.

Организация циклов с оператором

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

for (инициализация вяе; инкремент) БЛОК

Три раздела оператора for, инициализация, условие и инкремент, разделены точками с запятой. Когда Perl встречает оператор for, выполняется следующая последовательность действий.

• Вычисляется выражение инициализации.

• Вычисляется выражение, задающее условие окончания цикла. Если оно истинно - выполняется БЛОКкода.



• После выполнения блока производится приращение счетчика и снова проверяется условие. Если оно по-прежнему истинно, блок кода выполняется повторно. Этот процесс продолжается до тех пор, пока не перестает выполняться условие.

Ниже приведен пример цикла for:

fcr ( $а=0; $а<10; $а$а+2 J { padnt "АравЕЕ)5а\п";

Здесь переменной $а присваивается значение 0, затем выполняется проверка условия $а<10, оказавшегося истинным. В теле цикла выводится сообщение. Затем значение переменной $а увеличивается на 2: $а=$а+2. Снова выполняется проверка и цикл. Это продолжается до тех пор, пока $а станет равно 10. В этом случае проверочное условие ложно, и программа выходит из цикла.

Использовать счетчик в операторе for необязательно, цикл будет выполняться до

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

инициализации и инкремента:

51=10; ♦ ализа значения переменной

for { ; Si>-1; ) { print "Si..";

t Дехремент.

picint "Цжп окончен l\n";

Другие средства управления программой

Управлять процессом выполнения программы с помощью циклов и условных операторов достаточно удобно, но для создания программ с прозрачной структурой нужны и другие операторы управления. Действительно, в имеются операторы для досрочного завершения цикла while, для пропуска определенной части цикла for, для выхода из блока условного оператора if и для выхода из программы вообще. Некоторые из перечисленных конструкций рассмотрены в этом разделе. Их использование может облегчить чтение программы.

Альтернативная запись оператора if

Оператор if может иметь другой синтаксис. Если внутри блока имеется только одно выражение, оно может предшествовать if. Так, вместо кода

if выражевие] {выражение;}

можно написать:

выражение if (условное выражение);

Ниже приведено несколько примеров подобного синтаксиса:

$correct=l if (SgueSS == $question) ;

pdnt -ЭтожчизюрИ" if { $rat±D != 3.14159);

58 Чть I. :Ei Perl



0 1 2 3 4 5 6 7 8 9 10 11 12 [ 13 ] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122