Шаг 8 - Ветвление

Ветвление позволяет выполнять тот или иной кусок кода в зависимости от кого-то условия. Т.е. если переменная $x равна 10 вывести её на экран, а если меньше 10, то увеличить её на еденицу. В Perl ветвление обеспечивают операторы if, unless, и так называемый "условный оператор".

if - это даже не просто оператор, это конструкция вида if-elsif-else. Любой элемент этой конструкции (кроме первого), можно опустить. Действует это так, если условия в скобках оператора if истинно, то выполняется блок операторов идущих в фигурных скобках, если же условие ложно, то выполняется проверка в скобках elsif, если и оно ложно, то выполняется блок операторов в фигурных скобках оператора else. Примеры:

#!/usr/bin/perl -w

for($x=0; $x<10; $x++) {
	if($x==5) {
		print $x;
	}
}

Данный пример выведит только цифру 5. Но в нём не предусмотрены действия на случай если $x не равно пяти. Добавим это

#!/usr/bin/perl -w

for($x=0; $x<10; $x++) {
	if($x==5) {
		print "$x\n";
	} else {
		print "Счётчик цикла не равен пяти\n";
	}
}

8_1.gif (4245 b)

А если надо проверить не равен ли он ещё и 7? Можно запихать внутрь этого if ещё одну проверку, но правильнее сделать так:

#!/usr/bin/perl -w

for($x=0; $x<10; $x++) {
	if($x==5) {
		print "$x\n";
	} elsif ($x==7) {
		print "$x\n";
	} else {
		print "Счётчик цикла не равен ни пяти, ни семи :(\n";
	}
}

Этих elsif'оф можно поставить немеряное кол-во:

#!/usr/bin/perl -w

for($x=1; $x<13; $x++) {
	if($x==1) {
		print "$x\n";
	} elsif($x==2) {
		print "$x\n";
	} elsif($x==3) {
		print "$x\n";
	} elsif($x==4) {
		print "$x\n";
	} elsif($x==5) {
		print "$x\n";
	} elsif($x==6) {
		print "$x\n";
	} elsif($x==7) {
		print "$x\n";
	} elsif($x==8) {
		print "$x\n";
	} elsif($x==9) {
		print "$x\n";
	} else {
		print "Я только до десяти считать умею... :(\n";
	}
}

Громоздко, да? :)

unless аналогичен оператору if, но выполняет свой блок операторов, если условие в скобках ложно.

Условный оператор имеет вид "условие ? действие если истинно : действие если ложно". Выглядит это примерно так:

#!/usr/bin/perl -w

for($x=1; $x<13; $x++) {
	$x==5?print "$x\n":print "Переменная не равна пяти\n";
}

Вот и всё. Надеюсь понятно объясняю :)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Горностаев Сергей aka Deadcat.