Вы должны подумать о методе, что он должен делать и с какими данными. Если нулевые значения представляют фактические условия отказа, используйте исключения. Если допустимы нулевые значения, примите их.
Подумайте о принципах дизайн по контракту , в частности, каковы предварительные условия для вашей функции, и стандартизируйте способ их применения (что Мэтт и Лу оба предлагают в своих ответах, поэтому мне не нужно вдаваться в подробности).
Еще одна важная вещь, которую следует учитывать, - это размер сигнатур вашего метода. Если у вас много параметров для ваших методов, это, вероятно, означает, что у вас плохие абстракции. Вы можете сократить количество проверок параметров, которые необходимо выполнить, если вы группируете параметры вместе в объектах коллекции и используете эти объекты в качестве параметров. Вы можете перенести проверку параметров на эти объекты вместо того, чтобы проверять их в каждой функции, которая их использует.
Таким образом, вместо передачи десяти связанных параметров каждой функции, выясните, какие из них используются в каждой функции, упакуйте их в объект и включите в этот объект методы для проверки параметров. Это дает дополнительное преимущество, заключающееся в том, что его легко изменять в случае необходимости обновления правил, касающихся одного параметра.