Я чувствую, что в основном это из-за здравого смысла, и немного из-за личных предпочтений.
Как уже упоминали другие, если это общедоступный API, вы хотите по возможности предоставлять четкие сообщения об ошибках, поэтому лучше проверять параметры перед их использованием и генерировать исключения с сообщениями, как в вашем примере.
Если это внутренний код, то есть два других варианта, о которых следует подумать: использовать утверждения или не беспокоиться о проверке и полагаться на отладку. Как правило, я добавлю утверждения, если это будет код, который, как я ожидаю, будут вызывать другие разработчики, или если условие достаточно тонкое, чтобы отладка могла вызывать трудности. В противном случае я просто позволю этому потерпеть неудачу.
Иногда эту проблему можно избежать, используя шаблон Null Object . Если бы это был публичный API, я все равно был бы склонен включить проверки.