解説
「リフレクション」 (reflection) は、プログラムの中で、プログラム自体の構造や構成要素に対して、情報を得たり、値の書き換えを行ったりするような操作や機能のことを指します。こうした内容から、自己言及や自己反映計算などと翻訳されることもあります。
例えばオブジェクト指向のプログラミング言語では、クラスの配下に各種のデータや命令があります。それらの要素などをプログラムからたどって操作するのが、リフレクションという機能になります。
非常に強力な機能ですが、開発ツールのエラー検出機能などで確認できないような操作が容易に行えるため、うまく使わなければバグを生み出す原因にもなります。
サンプル
「リフレクション」のサンプルです。JavaScriptでは普通にプログラムを書いていると簡単にリフレクションを行えます。しかし、ここではあえて専用の「Reflect」オブジェクトを使い、プログラムを書いてみます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>「リフレクション」のサンプル</title>
<style> #output { font-size: 32px; line-height: 1.5; } </style>
</head>
<body>
<pre id="output"></pre>
<script>
window.addEventListener('DOMContentLoaded', e => {
const el = document.querySelector('#output');
const print = s => el.textContent += s + '\n';
class Character {
constructor(name, hp) {
this.name = name;
this.hp = hp;
}
};
const char = new Character('Ace', 99);
print('char is ' + JSON.stringify(char));
const hp = Reflect.get(char, 'hp');
print('hp is ' + hp);
Reflect.set(char, 'hp', 9);
print('char is ' + JSON.stringify(char));
});
</script>
</body>
</html>
char is {"name":"Ace","hp":99}
hp is 99
char is {"name":"Ace","hp":9}
