Условия и циклы или «Разбор полетов — часть 2»


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

Условные оператор или оператор ветвления - важная часть в языках программирования. Оператор позволяет выполнять только одно из нескольких действий в зависимости от условия. Если условие логическое, то нам вернется либо true, либо false - то есть значение типа Boolean. Язык Actionscript предоставляет нам 2 типа условные операторов - оператор if - для выбора из 2 альтернатив, либо оператор switch - для организации множественного ветвления. Рассмотрим первый:

if (<условие>){

<действия 1>

}

else{

<действия 2>

}

Принцип его работы очень прост. Если выполняется условие, то мы переходим к выполнению действий 1, иначе выполняем действия 2. Существует еще его сокращенная форма - тернарный условный оператор, который выглядит так:

(<условие>) ? <действия 1> :<действия 2>;

Думаю тут все понятно, оператор выполнит либо действия 1, либо действия 2, в зависимости от условия. Рассмотрим пример:

var a=1; // объявим 2 переменные
var b=2;
if (a>b){ // условие не выполнится, поэтому 
	trace(a);
}
else{
	a=a+b; // переменная а изменит свое значение
}
(a>b)? trace(a) : trace(b); //выведет а, то есть 3, так как условие выполнится

Блок else в операторе if может быть опущен, а также можно использовать цепочку операторов else if, то есть:

var a=1; // объявим 2 переменные
var b=2;
if (a>b){ // условие не выполнится 
	trace(a);
}
else if(b>a){ // продолжаем цепочку операторов
	a=a+b; // переменная а изменит свое значение
}
else{
	trace(b);
}
if (a>b){ // блок else тут отсутствует
	trace(a); // выведет 3
}

Еще один тип условного оператора - оператор switch, который позволяет выбирать сразу из нескольких альтернатив.

его синтаксис таков:

switch (<условное выражение>){

    case <выражение 1>:

        <блок кода 1>;

        break;

    case <выражение 2>:

        <блок кода 2>;

        break;

    default:

        <блок кода 3>;

}

Блоков case может быть сколько угодно. Если ни один из блоков case не выполняется, то выполняется блок default, который можно опускать, если он не нужен. Обратите также внимание на оператор break, который необходим!!! Если он будет отсутствовать, то выполнив условие в одном блоке, то программа не остановится на этом операторе и начнет сравнивать результат условия с остальными выражениями. Рассмотрим пример:

var a=1; // объявим 2 переменные
var b=2;
switch(b-a){ // Проверям совпадение с результато операции
	case 2: // не совпадет, поэтому идем дальше
		trace(a+b);
		break;
	case 1: // совпадает, поэтому
		trace(a-b); // выведет -1
		break;
	case 3: // этот блок выполняться не будет
		trace(b-a);
		break;
	default: // этот блок тоже не выполниттся, потому что выполнился один из блоков case
		trace(0);
}

Вот так. Кстати, обратите внимание, что оператор switch можно заменить цепочкой операторов if.

Теперь давайте поговорим о циклах. Цикл - это специальная конструкция языка, которая позволяет многократно выполнять определенную последовательность действий, пока не выполнится условие. В языке Actionscript существует 5 различных типов циклов: while, do while, for, for-in, for-each-in. Начнем с первого типа цикла и скажу сразу - это "отец" всех остальных циклов, потому что с помощью него можно реализовать любой другой цикл. Цикл while или цикл с предусловием позволяет нам выполнять определенную последовательность действий, пока выполняется условие:

while (<условие>){

    <операции>;

}

Сразу предупрежу, если внутри цикла не будет действий, которые будут влиять на результат условия, цикл никогда не прекратит свою работу! Поэтому внимательней. Если условие не выполняется, то цикл не выполнится ни разу. Близкий брат этого цикла - цикл do-while или цикл с постусловием:

do {

    <операции>;

} while(<условие>);

Фактически - это перевернутый оператор while. Такой тип цикла гарантирует выполнение операций хотя бы один раз. Еще один тип цикла - это цикл for, хотя формат записи его резко отличается от предшественников - на самом деле это сокращенная форма записи цикла while, только коректировка и инициализация размещается вместе с условным выражением:

for(<инициализация>,<условное выражение>,<корректировка>){

    <операции>;

}

Такая запись намного компактней и очень часто - самый удобный из циклов - цикл for. Рассмотрим примеры рассмотренных выше циклов:

var a=1; // объявим 2 переменные
var b=2;
while (b>a){ // увеличиваем a, пока не выполнится условие
	a++;
}
a+=5; // увеличим а на 5 
do{
	a--; // уменьшаем а на 1
} while(a>0); // пока а больше 0
for (var i=0; i<10; i++){ // 10 раз суммируем а и b и сохраняем в а
	a+=b;
}
trace(a); // выведет 20

Оставшиеся 2 типа циклов for-each-in и for-in предназначены для обработки динамических структур - динамических списков, объектов. Так что подробным рассмотрением их займемся в одной из следующих глав, когда рассмотри динамические структуры и объекты. Для любопытных приведу один простой пример:

var digitArray = [1,2,3,4]; // создаем числовой массив
for each (var item in digitArray){
	trace(item);
}

То есть так можно обойти любую структуру и не обязательно знать, сколько в ней элементах, но подробности, после знакомства с динамическими структурами и объектами.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *