Perl 6 Shortcuts(첫 번째 섹션)
단축(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)
총결산
$.
사용:
를 하나 놓고 그것을 방법으로 호출할 때이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.