🦔

[Feature #21300] 配列のサイズを変更する Array#size= を追加する提案

に公開

[Feature #21300] Suggestion: Method for Array truncation

  • 配列から要素を切り捨てる場合 Array#pop(n)Array#slice! が利用できる
ary = [1, 2, 3, 4, 5]

# ary から n 個分の要素を切り捨てる
# 削除された要素を返す
pp ary.pop(2) # => [4, 5]
pp ary        # => [1, 2, 3]


# #slice! も同じような挙動
ary = [1, 2, 3, 4, 5]
pp ary.slice!(3..-1) # => [4, 5]
pp ary               # => [1, 2, 3]
  • このときに『削除された要素の配列を返す』というオーバーヘッドがあるのでそれを回避する目的で Array#size= を追加する提案
ary = [1, 2, 3, 4, 5]

# サイズが 3 になる
ary.size = 3
pp ary # => [1, 2, 3]

# より大きいサイズを設定すると nil 埋めになる
ary.size = 5
pp ary # => [1, 2, 3, nil, nil]
  • 最初見たときに ary.size = 3 で要素の中身が変わるのが気持ち悪いなーと思ったんですが単純に『そのサイズになる』みたいな意味合いだとそこまで認知は難しくないような気もしてきた
  • Array#clearArray#fill みたいなレシーバの要素を調整する、みたいなメソッドの亜種だと思えばそこまで違和感はなさそう…?
    • ary.resize(3) みたいな名前のほうがまだわかりやすいとかはありそう
  • ただ、今回のオーバーヘッドがどれぐらいボトルネックなのかそもそもそれが必要になるケースがどれぐらいあるのか、っていうのが気にはなりますねえ
GitHubで編集を提案

Discussion