One More Recipe Against NULL

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Вы знаете, что такое NULL, не так ли? Это зло. В ООП ваш метод может возвращать NULL, принимать NULL в качестве аргумента, ваш объект может инкапсулировать его в качестве атрибута или вы можете присвоить его переменной. Все четыре сценария плохи для поддержки вашего кода - в этом нет сомнений. Вопрос в том, что делать вместо этого. Давайте обсудим часть “вернуть его”, и я предложу еще одну “лучшую практику” на основе того, что обсуждалось несколько лет назад.

Integer max(List<Integer> items) {
  // Calculate the maximum of all
  // items and return it.
}

Что должен делать этот метод, если список пустой? Java’s Collections.max() выбрасывает исключение. Ruby’s Enumerable.max() возвращает nil. PHP’s max() возвращает FALSE. Python’s max() вызывает исключение. C#’s Enumerable.Max() также выбрасывает исключение. JavaScript’s Math.max() возвращает NaN.

Какой вариант правильный, а? Исключение, NULL, false или NaN?

Исключение, если спрашиваете меня.

Но есть еще один подход, который лучше исключения. Вот этот:

Объект “по умолчанию” будет возвращен, если список пустой. Эта функция реализована в функции max() в Python: можно передать как список, так и элемент по умолчанию, который будет возвращен в случае, если список пустой. Если элемент по умолчанию не указан, будет сгенерировано исключение.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 17:02

sixnines availability badge   GitHub stars