Perl 6 Shortcuts(첫 번째 섹션)

5605 단어
원문 보기
단축(Shortcuts)은 논쟁적인 화제다.어떤 사람들은 그것이 코드를 더욱 빠르고 쉽게 읽을 수 있게 한다고 생각한다.어떤 사람들은 코드가 더 어려워진다고 생각한다.이 글은 Shortcuts의 것만 알려줄 뿐, 필요에 따라 결정된다.시작합시다.

클래스 속성의 공개 Getter/Setter


'getter'와'setter'의 개념은 많은 언어에서 공통되어 있다. 당신의 클래스에'물건'이 있고 그 물건의 값을 설정하거나 얻는 방법이 적혀 있다.이러한 설정 중 하나는 다음과 같이 표시됩니다.
class Foo {
    has $!attr = 42;
    method attr is rw { $!attr }
}

my  $obj = Foo.new;
say $obj.attr;
    $obj.attr = 72;
say $obj.attr;

#   >>
# 42
# 72

이것은 원래처럼 간결하지만, 공공 속성은 보통 이 코드를 작성하는 것을 짜증나게 하기에 충분하다.이것이 바로 $. 트와이어가 존재하는 이유다.단독으로 사용하면 'Getter' 를 만들 수 있습니다."setter"를 더 원한다면 is rw 기능을 사용해야 합니다.
class Foo { has $.attr is rw = 42; }
my  $obj = Foo.new;
say $obj.attr;
    $obj.attr = 72;
say $obj.attr;

#   >>:
# 42
# 72

우리는 속성상의 $! 트와이어를 $. 트와이어로 변경했고, 이것은 우리에게 공공적인 방법을 만들어 주었다.계속해!

메소드 호출에서 괄호를 생략합니다.


아래의 이런 코드는 자주 보지 못할 것이다. 코드 끝에 통톤의 괄호가 있다.그것들이 모두 일치할 수 있도록 확보해라!
$foo.log( $obj.nukanate( $foo.grep(*.bar).map(*.ber) ) );

popular webcomic을 떠올리는 사람들에게 Perl 6는 또 하나의 예비 옵션이 있다.
$foo.log: $obj.nukanate: $foo.grep(*.bar).map: *.ber;

만약 방법이 방법이 방법이 체인의 마지막에 사용된다면, 너는 그것의 원괄호를 생략하고, 사칭을 사용할 수 있다. 대체할 수 있다..grep를 제외하고 우리 위의 모든 호출은 체인에서 마지막(last in chain)이기 때문에 우리는 많은 원괄호를 피했다.때때로 나도 사칭 뒤에서 줄을 바꾸어 글을 쓰기 시작하는 것을 좋아한다.
또한 주의: 어떤 인자도 제공하지 않았다면, 방법 호출 중의 괄호를 생략할 수 있습니다.분호도 필요 없어요.

쉼표가 없는 구명 매개 변수


구명 파라미터만 제공하는 방법이나 하위 루틴을 호출하고 있다면, 파라미터 사이의 쉼표를 생략할 수 있습니다.때때로 나도 모든 매개 변수를 새 줄로 겹쳐 놓는 것을 좋아한다.
class Foo {
    method baz (:$foo, :$bar, :$ber) { say "[$foo, $bar, $ber]" }
}
    sub    baz (:$foo, :$bar, :$ber) { say "[$foo, $bar, $ber]" }

Foo.baz:
    :foo(42)
    :bar(72)
    :ber(100);

baz :foo(42) :bar(72) :ber(100);

# OUTPUT>>:
# [42, 72, 100]
# [42, 72, 100]

다시 한 번, 이것은 구명 매개 변수를 제공할 때만 유효합니다.다른 많은 사람들이 같은 형식으로 매개 변수나 Pairs를 제공하지만 쉼표를 생략할 수 없습니다.

구명 매개변수/Pairs의 정수


'만약 매개 변수나Pair가 정수를 값으로 받아들인다면, 숫자를 콜론과 키의 이름 사이에 쓴다.
say DateTime.new: :2016year :2month :1day :16hour :32minute;

#   >>:
# 2016-02-01T16:32:00Z

이것은 그 중 하나이다. 처음 그것을 배울 때 조화롭지 못해 보였지만, 곧 익숙해질 것이다.그것은 읽기에 영어와 매우 비슷하다.
my %ingredients = :4eggs, :2sticks-of-butter, :4cups-of-suger;
say %ingredients;

# OUTPUT>>:
# cups-of-sugar => 4, eggs => 4, sticks-of-butter => 2

공명 매개변수/Pairs의 부울 값


True를 표시하려면 키 자체 이름을 사용하고 False:
sub foo (:$bar, :$ber) { say "$bar, $ber" }
foo :!bar :ber;

my %hash = :!bar, :ber;
say %hash;

# OUTPUT>>:
# False, True
# bar => False, ber => True

주의: 이것도 부사에 적용될 수 있습니다!

구명 매개변수/Pairs의 Lists


만약 quote-word 구조를 어떤listy를 원하는 구명 인자/pair에 제공하고 있다면, 원괄호를 생략할 수 있습니다.키와 quote-words 사이에 공백을 남기지 않으면 됩니다.
sub foo (:@args) { say @args }
foo :args;

my %hash = :ingredients;
say %hash;

# OUTPUT>>:
# (foo bar ber)
# ingredients => (milk eggs butter)

구명 매개변수/Pairs에 변수 전달


너는 구명 파라미터가 이렇다고 생각하니?더 멋진 shortcut: 변수가 하나 있고 구명 파라미터와 같은 이름을 가지고 있다고 가정해 보세요. 변수 자체를 사용하여 그것을 전달합니다. 키 대신 콜론 다음에:
sub hashify (:$bar, :@ber) {
    my %hash = :$bar, :@ber;
    say %hash;
}

my ( $bar, @ber )  = 42, (1..3);
hashify :$bar :@ber;

# OUTPUT>>:
# bar => 42, ber => [1..3]

sub 호출에서도, 우리가 만든hash에서도 반복 키의 이름도 없습니다.그것들은 변수의 이름에서 파생된 것이다.

Subs를 메소드로 호출


만약 당신이sub를 어떤 물건에 사용하려고 한다면,sub에 & 기호를 앞에 놓으면 됩니다.호출자는 첫 번째 위치 매개 변수이며, 모든 다른 매개 변수는 평소와 같이 전달될 것이다.
sub be-wise ($self, $who = 'Anonymous') { "Konw your $self, $who!" }

'ABC'.&be-wise.say;
'ABC'.&be-wise('Zoffix').say;

# OUTPUT>>:
# Know your ABC, Anonymous!
# Know your ABC, Zoffix!

이것은 실질적으로 그다지 보기 흉하지 않은 어떤 실례에서 .map 호출하는 방식이지만, 대부분의 경우 그것의 가독성이 더욱 좋다.
sub be-wise ($self, $who = 'Anonymous') { "Know your $self, $who!" }

'ABC'.map({be-wise $_, 'Zoffix'})».say;
say be-wise 'ABC', 'Zoffix';

# OUTPUT>>:
# Know your ABC, Zoffix!
# Know your ABC, Zoffix!

완전성을 위해 과도하게 사용하지 않습니다. 서명을 설정하기 위해 포인트 블록을 내장 호출할 수 있습니다.
'ABC'.&('Know your ' ~ *).say;
'ABC'.&( -> $self, $who = 'Anonymous' {"Know your $self, $who!"} )('Zoffix')
    .say;

# OUTPUT>>:
# Know your ABC
# Know your ABC, Zoffix!

Hyper 메소드 호출


우리가 얘기했으니까.맵의 바로 가기, hyper 조작부호를 기억하세요.방법이 호출되기 전에 호출자의 모든 요소에서 호출자의 뒤에 따라가고 싶은 방법을 표시하기 위해 그것을 사용하십시오. 호출자 자체가 아니라 호출자의 모든 요소를 호출하고 싶은 방법을 표시합니다.
(1, 2, 3)».is-prime.say;
(1, 2, 3)>>.is-prime.say;

# OUTPUT>>:
# (False True True)
# (False True True)

총결산

  • 트와이어를 사용하여 공공 속성을 성명
  • 괄호 대신 $. 사용
  • 구명 파라미터만 포함된 Methods/sub 호출은 쉼표가 필요 없음
  • 키와 짝퉁 사이에 정수치를 써서 Int값을 전달
  • 키 자체를 사용하여 True 부울 값을 지정합니다
  • .
  • 키 자체를 사용하고 키 이름과 사칭 사이에 하나를 삽입합니다!번호로 False 값을 지정합니다
  • .
  • 값이 quote-word 구조일 때 키 뒤에 동그란 괄호가 없음
  • 변수와 키의 이름이 같으면 키(기호 포함)로 직접 사용하고 값을 지정하지 않아도 된다
  • sub에 :를 하나 놓고 그것을 방법으로 호출할 때
  • 목록의 모든 요소에 대해 하나의 방법을 호출하기 위해 조작부호를 사용합니다
  • 좋은 웹페이지 즐겨찾기