【Ruby3.x】WeakMap定数の使い方
WeakMap定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
WeakMap定数は、Ruby 3.0で導入された、キーと値を関連付けて保持する特殊なマップデータ構造を表す定数です。これは一般的なハッシュ(Hash)と同様にキーと値のペアを格納しますが、メモリ管理において重要な違いがあります。
WeakMapの最も大きな特徴は、キーに対する「弱い参照(weak reference)」を持つ点です。これは、WeakMapにキーとして登録されたオブジェクトが、他のどの場所からも参照されなくなった場合、ガベージコレクションによってメモリから解放されると同時に、WeakMap内の対応するキーと値のペアも自動的に削除されることを意味します。これに対し、通常のHashはキーオブジェクトへの「強い参照」を持つため、キーがHashに存在する限りメモリに保持され続けます。
この「弱い参照」の特性により、WeakMapはメモリリークを防ぎ、アプリケーションのメモリ使用量をより効率的に管理するのに役立ちます。例えば、特定のオブジェクトに対して補助的なデータやメタデータを紐付けたいものの、そのオブジェクト自体が不要になった際には、紐付けられたデータも自動的に破棄されてほしい、といった場合に非常に有効です。
WeakMapのキーにはオブジェクトのみを使用でき、シンボルや数値などのイミュータブルな値はキーとして使用できません。値はどのような型のオブジェクトでも保持できます。WeakMapは、多数の一時的なオブジェクトに情報を付加するような状況で、メモリ効率を保ちながらデータ管理を行うための強力な機能として活用されます。
構文(syntax)
1weak_map = Ref::WeakMap.new 2key_object = Object.new 3value_data = "データ" 4weak_map[key_object] = value_data 5retrieved_data = weak_map[key_object]
引数(parameters)
引数なし
引数はありません
戻り値(return)
Class
WeakMapは、キーがガベージコレクションの対象となりうる、キーと値のペアを格納する新しいクラスを返します。