this post was submitted on 28 Nov 2023
555 points (97.9% liked)

Programmer Humor

32000 readers
1744 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 4 points 9 months ago (2 children)

I'm not shy about using typeof for logging when it's appropriate. Anything braver than that and you're probably getting into reflection, which also means you're probably not writing the code the way you should.

[–] [email protected] 16 points 9 months ago (2 children)

Your assumption that "using reflection means the code is wrong" seems a bit extreme, at least in .Net. Every time you interact with types, you use reflection. Xml and Json serialization/deserialization uses reflection, and also Entity Framework. If you use mocking in test you are using reflection.

We have an excel export functionality on our sites that uses reflection because we can write 1 function and export any types we want, thanks to reflection.

[–] [email protected] 3 points 9 months ago (1 children)

I said "probably". I'm not out here blacklisting a useful tool. That would be ridiculous. If you found a situation where it was appropriate, great, more power to you. Those cases definitely exist.

[–] [email protected] 4 points 9 months ago (1 children)

A good sense of "code smell" is one of the most valuable programming skills. I think your "probably" is justified: if you're doing X, you should look twice at how you're doing it. Maybe it's right, but usually it's not, so it's worth a pause and a thought.

[–] [email protected] 1 points 9 months ago

huh, you’re right! I’m trained on a different kind of code. In C# in particular, which I use mostly to do sneaky stuff (patch/inject runtime code to, um, “fix” it) and when I see a project that it’s too clean it smells

I also see python code (I code regular stuff in it) that could be written much more cleanly using monkey-patching

[–] [email protected] 2 points 9 months ago

Modern .NET is reducing dependence on reflection. System.Text.JSON and other core libraries have leveraged source generation to produce AOT + trim friendly, reflection free code. But yeah, it's not a taboo like say dynamic, it's perfectly normal to use reflection in idiomatic C# code.

[–] [email protected] 5 points 9 months ago (2 children)

Hm, I'm currently working on a project with a ton of runtime-configurable plug-ins and dependencies between them. All of that is held together with a copious amount of black QMetaObject magic. I had the same thought about it, but I'm not sure how you'd get similar functionality without reflection and not making it even more convoluted and fragile...

[–] [email protected] 3 points 9 months ago (1 children)

Metaprogramming is extremely useful for long term code readability. What you're doing is probably fine but we can't really evaluate that without seeing the actual code.

[–] [email protected] 2 points 9 months ago

That's why I stopped writing code and started writing ASTs and AST transformers that can be configured to emit libraries.

[–] [email protected] 1 points 9 months ago

I will fight for your right to party.