TL;DR

プログラムが実行時に自分自身を調べる機能。メタプログラミングの一種である。

仕組み

リフレクションを使うと、実行時にデータの型を特定したり、データの内容を探索したりできる。データのフィールドを変更したり、メソッドを呼び出したりすることもできる。

例

サポートしている言語は、Python や Ruby のような動的型付けの言語が多い。ただし、Java や Go のような静的型付けの言語でもサポートしている場合がある。

The Go Blog の「The Laws of Reflection」は、計算機科学でのリフレクションを、プログラムが自分自身の構造、特に型を通して調べる能力と説明している。Go のリフレクションには、次の 3 つの法則がある。

  1. リフレクションは、インタフェースの値からリフレクションのオブジェクトへ向かう
  2. リフレクションは、リフレクションのオブジェクトからインタフェースの値へ向かう
  3. リフレクションのオブジェクトを書き換えるには、その値が設定可能でなければならない

注意点

The Go Blog によると、リフレクションは混乱の元になりやすい。裏で何が起きているかを隠してしまうので、慎重に使い、どうしても必要なとき以外は避けるべきである。

関連

出典