- PVSM.RU - https://www.pvsm.ru -
1. Особенности работы с переменными и литералами в Perl6 [1]
2. Perl6 — Операции над переменными, анонимные блоки [2]
В данной статье мы рассмотрим условные операторы и циклы, а также проведем несколько небольших экспериментов по их использованию.
Указанные выше операторы в Perl 6 обязательно должны получать блоки для выполнения: даже если необходимо выполнить только одно выражение, его необходимо передать внутри блока: { выражение; }
if (Условие)
{Блок}
elsif (ДругоеУсловие1)
{Блок1}
elsif (ДругоеУсловиеN)
{БлокN}
else
{ЕщеОдинБлок}
Блок сохраненый в скалярной переменной передать нельзя, однако можно передать инструкцию о выполнении сохраненного блока: {$block();}
Круглые скобки вокруг условия не обязательны.
Следующий условный оператор это unless: он выполняет Блок1 если условие1 является ложным, иначе выполняется ДругойБлок
unless (условие1)
{Блок1}
else
{ДругойБлок}
Однако есть конструкция, в которой возможно использование не блока, а единственного оператора:
действие if условие;
действие unless условие;
Если для текущей задачи необходимо выполнить несколько простых действий и хочется записать их в похожем виде, то можно указать их с помощью конструкции
(действие1; действие2;) if условие;
Если написать следующую конструкцию
my $var = (
if ($i==0
{
1+1;
}
)
то в перменную $var будет занесено последнее вычисленное выражение, в данном случае если $i равна нулю, то вычисленным значением будет 2, если же $i не равно нулю, то вычисленным значением будет Nil (одноименного типа Nil)
Ещё один из видов условных операторов, это оператор выбора:
given $value
{
when 'str1' {Блок1}
when 40 {Блок2}
when 'str1' {Блок3}
default {БлокПоУмолчанию}
}
После первого же успешного сравнения оператор given прекращает свою работу: это значит что Блок3 никогда не будет выполнен.
Сравнение идет в том порядке в котором указаны: если поставить после default какой либо when то до него сравнение никогда не дойдет, т.к. после default произойдет остановка выполнения оператора.
$i = 0;
while ($i<10)
{
$i++;
}
Данный цикл переберет все значения от 0 до 10. Круглые скобки вокруг условия не обязательны.
Следующий оператор это until: он выполняет указанный блок до тех пор, пока условие не станет истинным:
$i = 0;
until ($i>=10)
{
$i++;
}
Данный цикл сделает то же самое что и предидущий.
Так же как и с условием, возможна конструкция
say $a++ while $a<10;
($a++; say $a) until $a>9;
Следующий оператор цикла имеет вид
loop (НачальныеУсловия; УсловиеОкончания; ИзменениеПеременныхЦикла)
{Блок}
В блоке НачальныеУсловия задаются начальные значения переменных, в УсловиеОкончания указывается выражение которое будет определять, нужно ли начинать следующую итерацию цикла или нет, ИзменениеПеременныхЦикла содержит в себе выражения, которые будут выполняться в конце каждой итерации.
loop (my $i=0; $i<10; $i++)
{
say $i;
}
loop (my ($i, $f) = (0,0); $i<10 && $f<5; $i++, $f++)
{ say $i, ' ', $f; }
loop (my $i=0; $i<10; ($i+=2; $i--))
{
say $i;
}
Оператор цикла for используется для перебора всех элементов массивов или списка переданного ему
for @mas, @mas2, 'string' 20, True -> $elemList
{Блок}
При каждой итерации к элементу списка можно обратиться через переменную $elemOfMas, которая является псевдонимом этого элемента, однако изменять значения элементов списка через эту пееменную нельзя. Для того чтобы иметь возможность менять элементы списка необходимо вместо '->' использовать '<->'
Для всех операторов цикла можно применять операторы next (начать следующую итерацию), redo (Вернуться на следующую итерацию), last (Остановить выполнение цикла).
Имеется возможность запустить цикл с постусловием:
repeat
{Блок}
while (Условие);
и
repeat
{Блок}
until ($x >= 10);
Так же в синопсах заявлено что можно будет написать конструкцию
repeat while (Условие)
{Блок};
однако в последней версии (12.09) данная конструкция выдавала ошибку.
Автор: WarFair
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/17286
Ссылки в тексте:
[1] 1. Особенности работы с переменными и литералами в Perl6: http://habrahabr.ru/post/152403/
[2] 2. Perl6 — Операции над переменными, анонимные блоки: http://habrahabr.ru/post/153875/
Нажмите здесь для печати.