Use-cases for reflection,
Recently I was talking to a co-worker about C++ and lamented that there was no way to take a string with the name of a class field and extract the field with that name; in other words, it lacks reflection. He gave me a baffled look and asked when anyone would ever need to do such a thing.
Off the top of my head I didn’t have a good answer for him, other than “hey, I need to do it right now”. So I sat down and came up with a list of some of the things I’ve actually done with reflection in various languages. Unfortunately, most of my examples come from my web programming in Python, and I was hoping that the people here would have more examples. Here’s the list I came up with:
- Given a config file with lines like
x = “Hello World!”
y = 5.0
dynamically set the fields of some
configobject equal to the values in that file. (This was what I wished I could do in C++, but actually couldn’t do.)
- When sorting a list of objects, sort based on an arbitrary attribute given that attribute’s name from a config file or web request.
- When writing software that uses a network protocol, reflection lets you call methods based on string values from that protocol. For example, I wrote an IRC bot that would translate
!some_command arg1 arg2
into a method call
actions.some_command(arg1, arg2)and print whatever that function returned back to the IRC channel.
- When using Python’s __getattr__ function (which is sort of like method_missing in Ruby/Smalltalk) I was working with a class with a whole lot of statistics, such as late_total. For every statistic, I wanted to be able to add _percent to get that statistic as a percentage of the total things I was counting (for example, stats.late_total_percent). Reflection made this very easy.
So can anyone here give any examples from their own programming experiences of times when reflection has been helpful? The next time a co-worker asks me why I’d “ever want to do something like that” I’d like to be more prepared.
I can list following usage for reflection:
- Late binding
- Security (introspect code for security reasons)
- Code analysis
- Dynamic typing (duck typing is not possible without reflection)
Some real-world usages of reflection from my personal experience:
- Developed plugin system based on reflection
- Used aspect-oriented programming model
- Performed static code analysis
- Used various Dependency Injection frameworks
Reflection is good thing 🙂
That’s the answer Use-cases for reflection, Hope this helps those looking for an answer. Then we suggest to do a search for the next question and find the answer only on our site.
The answers provided above are only to be used to guide the learning process. The questions above are open-ended questions, meaning that many answers are not fixed as above. I hope this article can be useful, Thank you