プログラミングにおけるreflectionの概念を理解するところで詰まっている。
属性値やメンバ函数を参照するときに変数を介せたり,属性値・メンバ函数の一覧を取得できたりする機能を「reflection」って呼ぶ理由というか道理が分からない。
「反射」とか「反省」という意味のはずだけど,その意味とプログラミング言語における役割とが全然噛み合っているように思えない。
プログラミングにおけるreflectionの概念を理解するところで詰まっている。
属性値やメンバ函数を参照するときに変数を介せたり,属性値・メンバ函数の一覧を取得できたりする機能を「reflection」って呼ぶ理由というか道理が分からない。
「反射」とか「反省」という意味のはずだけど,その意味とプログラミング言語における役割とが全然噛み合っているように思えない。
型情報(=属性値やメンバ函数など)というのは,〝普通のコーディング〟ではソースコードを書いているときにしか分からないけど,それを実行しているときにでも分かる(=変数で参照しているから属性値やメンバ函数自体の名前が分かったり,あるいはもっと単純に属性値やメンバ函数の一覧が分かったりする)ようにコンパイル済みの実行コードに「映し出す」っていう感じですかね……?
BT: https://pleroma.amefur.asia/objects/5ac2dd6b-e4a2-42ff-b72f-f37aff0a40d0
SomeObjというオブジェクトに実装されているmemberFunc()というメンバ函数を呼び出すときの書き方として,
↓こうあるのを
SomeObj.memberFunc();
↓こう書くこと,あるいは書ける機能を
SomeObj.invokeMember("memberFunc");
「reflection」と呼ぶという理解をしていて,たぶん合ってるんだけど,どこが「反射」なの???という疑問があった。
「reflection」にある意味のうち,重要なのは「跳ね返す」という要素よりむしろ「映し出す」という要素なのか。
いや,私の理解が中途半端なんだと思います……。ただ,JavaScript言語だと
Math.floor(1.75);
を
Reflect.apply(Math.floor, undefined, [1.75]);
と書けるようにする機能に「reflection」の名前が当てられているんですよね。
(公式文書じゃないので典拠性に欠けますが)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply
…ていうか私の書き方だとSomeObj自体に.invokeMember()メンバ函数があることになっちゃってるな……。
senooken JP Social is a social network, courtesy of senooken. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All senooken JP Social content and data are available under the Creative Commons Attribution 3.0 license.