スキップしてメイン コンテンツに移動

投稿

4月, 2018の投稿を表示しています

Punning いろいろ

Perl 6 に colon pairs という構文がある。名前の通りコロンから始まる Pair のコンストラクタで、例えば次のように使う::foo(42) # foo => 42 :bar<yay> # bar => 'yay'; 値が括弧類を使うリテラルの場合は小括弧は不要 :baz # baz => True; 値を省略すると True になる :!quux # quux => False; 実に Perl らしい否定形 :$var # var => $var言う間でもないがこれは Hash を生成する場合のみならず、名前つき引数を渡す際にも便利である。 :$var という形式は変数の (sigil を除いた) 名前がそのままキーになるので、Perl 5 でよくある f(foo => $foo, bar => $bar, ...) といった繰り言をひとまとめにできる。 こういう構文を Punning (語呂合わせ、地口) と言ったりする。対称的に関数のシグネチャも同様に書ける:sub f(:$x, :$y) { $x - $y } my $x = 42; say f(:$x, :y(1)); # 41 say f(y => 1, :$x); # ditto; 名前つき引数なので順番は可変JavaScript の場合JavaScript は冗長な用語を好むので Punning より Destructuring Assignment (の省略構文) と言った方が通りが良いだろう。 Destructuring Assignment の正確な構文は複雑だが、「右辺のオブジェクトを構築するときに値を置くべき場所に識別子を置くと対応する値が束縛される」程度の認識で概ね正しい:const { x: value } = { x: 42 }; // value === 42そして代入しようとする識別子名がオブジェクトのキーと同じ場合は識別子を省略できる:const { x: x } = { x: 42 } // x === 42const { x } = { x: 42 }; // ditto; 上記の省略形このようにオブジェクトを分解して代入で…