4. 関数とミューテータ
関数とミューテータの違いを知るのは大事なことです。
関数は対象の状態を変更しません。
ミューテータは対象の状態を変更します。
スクリプト
1
2
3
4
5
6
7
8
9
10 my @numbers = [7,2,4,9,11,3];
@numbers.push(99);
say @numbers; #1
say @numbers.sort; #2
say @numbers; #3
@numbers.=sort;
say @numbers; #4
出力
[7 2 4 9 11 3 99] #1 (2 3 4 7 9 11 99) #2 [7 2 4 9 11 3 99] #3 [2 3 4 7 9 11 99] #4
解説
.push
はミューテータです。配列の状態が変更されています(#1)。
.sort
は関数です。ソートされた配列を返していますが、元の配列の状態は変更されていません:
-
(#2) でソートされた配列を返していますが、
-
(#3) を見ると元の配列は変更されていないことが分かります。
関数をミューテータのように振る舞わせるには、 .
の代わりに .=
を使います。(#4) (スクリプトの9行目)