Perl 6制御フロー:Control Flow
3011 ワード
Perl 6といえば、Perl 5と比較しなければならない.Perl 5はfeatureにswitchなどの便利な制御フローを加えているが、Perl 5を「便利」と表現すれば、Perl 6は「柔軟で変化が多い」と言える.Pythonのlist/dict/set generatorのように、Perl 6はすべての制御フローをPythonにあるgeneratorに変え、柔軟なWater Danceのようになる.
注意:文ブロックの末尾に になる.制御フローはいずれも値を返すことができ、逆構造でもblockを使用することができます. Perl 5は正常にblockを使うことしかできなくて、逆転するのは単語句 を使うことしかできません
with without orwith 追加 forをforとloop に分解しました
ステートメントブロック
forサイクル
while
doとwhileのような組み合わせはありません
If
switch/case文ストリーム、Perl 5のfeature
with/orwith/without
gather/take
LABEL
Reference Control Flow in Perl6
注意:
;
を加えることができ、文実行ステートメントブロック
{...}; # ; statement, ;
# do block
# sub/method ,
do {...};
# do block
# do {} , expression
quietly {};
# warnings
once {};
# , loop
forサイクル
# -> $item , $_
for @LIST -> $item {...}
# $_
for @LIST {...}
#
for @LIST.kv -> $idx, $val {...}
#
for %HASH.kv -> $key, $val {...}
# -> $_ {...}
# $_ , ->
# for ()
my @a = (for 1,2,3 { $_ * 2 });
my @a = do for 1,2,3 { $_ * 2 }; # do
# C
loop (my $i = 0; $i < 10; $i++) {...}
# loop loop ()
my @b = (loop(my $i = 0; $i < 3; $i++){ $a[$i] * 2});
while
while True/False {...}
until True/False {...}
{...} while True/False
{...} until True/False
# while/until loop ()
doとwhileのような組み合わせはありません
#
repeat {...} while True/False;
repeat {...} until True/False;
# Perl5 next/last/redo
If
# condition () , Apple Swift
if True/False {...}
# Perl5
{...} if True/False # statement modifier form。
# if ()
(if True/False {...})
({...} if True/False)
# , list
# else/elsif
if True/False {...} else {...}
if True/False {...} elsif {...} else {...}
#else
# Python {...} if True/False else {...}
# ()
$ok = (if True/False {...} else {...});
#### ,
# else if/elsif ,
if {} else -> $a {...}
# $a if block
# unless , else/elsif
unless True/False {...}
#
{} unless True/False
switch/case文ストリーム、Perl 5のfeature
given EXPR {
when EXPR { ... }
when EXPR { ... }
default { ... }
}
given EXPR {...}
{...}(EXPR)
# for $_, when/default
# when
# proceed when/default, when/default, given
# succeed given
# given block ()
with/orwith/without
with expression {...}
orwith expression {...}
without expression {...}
# if , expression
# if elsif unless
gather/take
gather { take ...; ...}
# , ,
# generate values lazily
# scoped dynamically
# so lazy
LABEL
#while/until/for loop LABEL, redo/next/last
# goto
Reference