Скажем, у вас есть следующий блок кода:
if (Light.On) {
// do something...
} else if (Light.Off) {
// do something else...
} else {
// this state should never be reached
}
Теперь предположим, что логика приложения диктует, что в этой части кода никогда не будет достигнуто последнее состояние, но это не то, что может быть определено во время компиляции. И, возможно, существуют другие состояния (например, Light.Broken
), которые могут быть установлены другими частями приложения, но которые здесь не используются.
Какой код вы добавляете в последний else
блок?
- Не добавлять код, потому что он все равно не должен быть достигнут.
- Добавьте некоторые функции ведения журнала, чтобы вы, как разработчик, знали, что достигнуто какое-то недопустимое состояние.
- Создайте исключение, потому что состояние не должно быть достигнуто, и если оно все равно достигнуто, что-то еще должно быть не так.
Первый вариант мне не кажется разумным, в надежде, что что-то пойдет не так, кажется едва ли правильным выбором. Преимущество второго варианта заключается в том, что ваше приложение не падает сразу, поэтому, если это происходит в редких случаях, которые не были обнаружены в ходе тестирования, заказчик может продолжать использовать приложение, и разработчик получает уведомление о проблеме. Вариант 3 приводит к сбою приложения, что, очевидно, не то, что вы хотите, чтобы ваши клиенты испытывали, но оно дает понять, что что-то не так.
Как лучше всего справиться с такой ситуацией?
РЕДАКТИРОВАТЬ, основываясь на комментариях:
Некоторые дополнительные соображения, чтобы направить обсуждение:
- Контракт метода, который содержит вышеуказанный код, не позволяет устанавливать какие-либо другие значения в этот момент, кроме On и Off.
- Предположим, что код находится в не столь критичной части приложения.