I’m actually working on an engine and came across a question I cannot
Who do you think should check if the values are correct?
Lets take an example. Suppose we have a function like this:
void Rotate(float _fAngle);
which obviously rotates something, doesn’t matter what.
In my opinion the engine shouldn’t be responsible for this simply
because it would mean giving it too much responsibilities.
On the other hand, I’ve been a young developer and know that people
don’t always check theirs values before calling a method.
Let me know what you think.
Please log in or register to post a reply.
Well, in the case of rotation specifically it doesn’t matter since
“out-of-range” angles will still work in all the trig functions in the
rotation formula. :)
But to answer your question in general: where a function has constraints
on its arguments, IMO it’s appropriate for the function itself to check
those constraints, as long as it is reasonable for it to do so (i.e. it
has all the relevant information available, checking the constraints is
not too expensive, etc).
More generally, the appropriate level and strategy of “defensive coding”
really depends on what kind of code you’re writing, and what the
consequences of an undetected error are. To take two extreme examples:
for high-performance math code, I’d do very little error checking, and
limit it to debug builds, since checking errors can be a drag on
performance and math functions generally don’t cause anything bad to
happen if you call them on bad input. Garbage in, garbage out, but it
won’t cause a crash or anything terrible. (An exception is if an error
leads to creating NaNs, since those can infect all your data quite
rapidly.) On the other hand, for a web service that needs to be running
24/7 I’d be meticulous about error checking, and go to great lengths to
ensure the system can recover and continue to operate after an error
(and that errors don’t cause it to corrupt its data, etc.).
I agree with you. Depending on the kind of code, the called function
should check for everything including what it receives. I do so on small
application only I use and where I have the complete control of the
We are talking about game engines here. The engine may return an error
code, but no actual crash should happen because of an incorrect
Of course checking inside the function works and it’s a good practice,
but that means the code who calls my function is already wrong somewhere
and that’s not the engines fault nor should it be the engine to correct
it. Doing so just hides the real problem.
Anyway, it’s always good the have another opinion on the subject (even
if it’s only one…)
Thanks for taking the time to answer ;)