ジュリアの感嘆符の規約
概要 1
ジュリアでは、関数名の最後に感嘆符bang!
を追加することをバンク規約と呼ぶ。これらの関数は、与えられた引数を変更する特徴がある。
コード
function add_1!(x)
x .+= 1
return x
end
foo = [2,5,-1]
add_1!(foo)
foo
例えば、上のコードを実行すると、以下の結果が得られる。
julia> foo = [2,5,-1]
3-element Vector{Int64}:
2
5
-1
julia> add_1!(foo)
3-element Vector{Int64}:
3
6
0
julia> foo
3-element Vector{Int64}:
3
6
0
配列foo
は関数の外で定義され、「add_1!()」によって要素が$1$ずつ増えて返されただけでなく、引数自体が変更された。
説明
代表的なメソッドであるpop!()
は、配列の最後の要素を削除しつつ返すが、この関数が元の配列を変更できない場合、MatlabやRのように広く認知されているデータ構造を使用するのが難しく、一般的なプログラミングに慣れているユーザーにとっては非常に不便だったかもしれない。
Pythonで関数ではなくメソッドを使用したときにクラスのデータまで変更される感覚と同様に捉えればいい。ジュリアは言語設計上クラスをサポートしていないので、正確な説明ではないが、Pythonでメソッドを使っていた時が便利だった時に役立つことができる。
環境
- OS: Windows
- julia: v1.7.0