2月
14
2007
分類:
最近更新:
2007-02-14
什麼是 Reflection ?
Reflection ,一般譯為「反射」。但我一般說這是 讓 object 看到自己的外貌的功能
(PHP5 的動態函數/行為調用效率測試) 。這說法似乎和「反射」一詞扯不上關係。事實上,我稱這種能力為「自識」能力。
藉由翻譯《To Ruby From PHP》之機會,我整理了我的觀點。我認為 Reflection 其實是 Java/C# 等缺乏個體自識能力之語言才有的詞彙。因為它們的個體不具自識能力,當一個體欲觀察自身輪廓時,必須先配置另一個可反射對象輪廓的個體,該個體才能藉由觀察反射體而得知自身輪廓。而優秀的動態語言 (如 Ruby, Python) 中之個體,不需要藉助其他個體反射自身就能察知自身輪廓。
以現實事物為喻,在 Java/C# 中的個體,要拿一面鏡子 (an instance of reflection class) 擺在自己面前,藉由鏡子反射的影像才能看到自己有幾隻手、幾雙腳。而 Ruby, Python 中的個體,不需要靠鏡子就能知道自己有幾隻手、幾雙腳,它們有與生俱來的能力可以察知自身狀態,故我稱之為「自識」能力。談 Ruby, Python 可能讓多數人覺得陌生,我用 JavaScript 這個大家可能都會寫個幾行的語言為例。 JavaScript 這個 Java 的冒名雙生兄弟之自識能力都比 Java 優秀。如下所示:
就這麼簡單囉。在《PHP5 的動態函數/行為調用效率測試》中,則是比較在 PHP5 中用 Reflection class 和傳統函數之執行效率。在 PHP5 , Reflection class 不論使用方式與效率,都不及傳統函數。在動態語言中,個體有自識能力,所以 reflection 顯得多餘了。
相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/2728221.html
樂多舊回應