The rule of thumb which is applicable across most languages (all that I vaguely know) is that an assert
is used to assert that a condition is always true whereas an if
is appropriate if it is conceivable that it will sometimes fail.
In this case, I would say that assert
is appropriate (based on my weak understanding of the situation) because records
should always be set before the given method is called. So a failure to set the record would be a bug in the program rather than a runtime condition. Here, the assert
is helping to ensure (with adequate testing) that there is no possible program execution path that could cause the code that is being guarded with the assert
to be called without records
having been set.
The advantage of using assert
as opposed to if
is that assert
can generally be turned off in production code thus reducing overhead. The sort of situations that are best handled with if
could conceivably occur during runtime in production system and so nothing is lost by not being able to turn them off.