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
  • に分解しました
    ステートメントブロック
    {...}; #     ;      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
  • Control Flow in Perl6