Следует ли разрешать пустые / пустые параметры?

Недавно я обсуждал с коллегой, следует ли разрешить передачу пустых или пустых коллекций в качестве параметров метода. Я считаю, что это должно вызвать исключение, поскольку оно нарушает «контракт» метода, даже если это не обязательно нарушает выполнение метода. Это также имеет то преимущество, что «терпит неудачу». Мой коллега утверждает, что это приводит к засорению кода проверками «не пусто / не пусто», даже если это не имеет особого значения.

Я понимаю его точку зрения, но разрешение пустых или пустых параметров заставляет меня чувствовать себя неловко . Он может скрыть истинную причину проблемы, отсрочив сбой!

Давайте возьмем два конкретных примера:

1) Если у нас есть класс Interval с методом перекрытия (Interval), что должно произойти, если будет передано значение null как параметр? Я считаю, что мы должны выбросить исключение IllegalArgumentException, чтобы вызывающий абонент знал, что, вероятно, что-то не так, но мой коллега считает, что возврата false достаточно, поскольку в сценариях, где он его использует, просто не имеет значения, является ли второй интервал null или нет (все, что имеет значение, - перекрываются ли они).

2) Что должно произойти, если задан такой метод, как fetchByIds (идентификаторы коллекций), если будет предоставлена ​​пустая коллекция? Еще раз я хотел бы предупредить вызывающего абонента, что происходит что-то ненормальное, но мой коллега нормально принимает пустой список, так как ему снова все равно, есть ли идентификаторы или нет.

ответственность вызываемого кода end? В обоих случаях вызывающий код не заботился о том, был ли параметр пустым или пустым, но в других сценариях это могло указывать на вероятную ошибку. Должен ли метод гарантировать только то, что он не сломается, пока соблюдаются предварительные условия, или он должен также пытаться идентифицировать потенциальные вызовы с ошибками?

РЕДАКТИРОВАТЬ: Я вижу много хороших ответов, и большинство из них, как правило, говорят, что определяют это как договор / в документации и придерживаюсь его, но я Мне нравится ваше мнение о том, когда разрешать это, а когда нет (если вообще). Что бы вы сделали в конкретных примерах? Учитывая, что для 90% случаев использования без проверки ввода будет нормально, вы все равно будете проверять, чтобы очистить ошибки в оставшихся 10%, или вы предпочтете устранять их по мере их появления и избегать ненужных нулевых / пустых проверок?

10
задан Zecrates 22 September 2010 в 12:36
поделиться