5. 繰り返し、条件分岐
Perl6には、たくさんの条件分岐・繰り返し構造があります。
5.1. if
このコードは条件を満たした時にだけ実行されます。
my $age = 19;
if $age > 18 {
say 'Welcome'
}
Perl6では、コード部と条件部を逆順に書くことができます。
たとえコード部と条件部を逆順にしても、条件部が常に先に評価されます。
my $age = 19;
say 'Welcome' if $age > 18;
条件を満たさない場合に代わりに実行されるブロックを指定することができます:
-
else
-
elsif
# 変数の値によって違うコードを実行します
my $number-of-seats = 9;
if $number-of-seats <= 5 {
say 'I am a sedan'
} elsif $number-of-seats <= 7 {
say 'I am 7 seater'
} else {
say 'I am a van'
}
5.2. unless
if
文の否定バージョンが unless
です。
下のコードは:
my $clean-shoes = False;
if not $clean-shoes {
say 'Clean your shoes'
}
こう書くことができます:
my $clean-shoes = False;
unless $clean-shoes {
say 'Clean your shoes'
}
Perl6での否定は、 !
あるいは not
で行います。
unless (条件)
を if not (条件)
の代わりに使うことができます。
unless
は else
節を持つことはできません。
5.3. with
with
は if
文に似ていますが、変数が定義されているかどうかをチェックします。
my Int $var=1;
with $var {
say 'Hello'
}
もし変数に値を代入していない場合、何も起こりません。
my Int $var;
with $var {
say 'Hello'
}
without
は with
の否定バージョンです。 unless
と関連付けて覚えることができるでしょう。
もし最初の with
の条件が満たされない場合、代わりに実行されるコードを orwith
で指定することができます。
with
と orwith
は、 if
と elsif
と同じような関係です。
5.4. for
for
ループは複数の値に対して繰り返しを行います。
my @array = [1,2,3];
for @array -> $array-item {
say $array-item*100
}
配列の要素ひとつひとつに対して *100
するために、ループ変数 $array-item
を作っていることに注意してください。
5.5. given
Perl6の given
は、他の言語で言う switch文です。
my $var = 42;
given $var {
when 0..50 { say 'Less than or equal to 50'}
when Int { say "is an Int" }
when 42 { say 42 }
default { say "huh?" }
}
マッチが成功すると、それ以降のマッチングは行われません。
proceed
を使うことで、Perl6にマッチ成功後もマッチングを続けるよう指示することができます。
my $var = 42;
given $var {
when 0..50 { say 'Less than or equal to 50';proceed}
when Int { say "is an Int";proceed}
when 42 { say 42 }
default { say "huh?" }
}
5.6. loop
loop
は for
ループを作るための別の方法です。
実際に、loop
はC言語で for
ループと同じようなものです。
Perl6はC言語ファミリーの一員なのです。
loop (my $i=0; $i < 5; $i++) {
say "The current number is $i"
}
繰り返しと条件分岐についてさらに知るには、 http://doc.perl6.org/language/control(英語) を参照してください。 |