True? False? А может Neutral?

Стандартный тип boolean с true/false это мощный инструмент, но может ли он стать еще лучше? Реализуем с его помощью состояние поставил ли юзер лайк или дизлайк посту.

1. Начнем с дефолтного варианта - юзер ставил лайк/дизлайк

Foo { boolean isLiked = false; boolean isDisliked = false; }

У нас есть два поля + нужна дополнительная логика/тесты что бы у нас не было случая, когда юзер поставил и лайк, и дизлайк.

2. Заменяем тип на объект - теперь лайк это true, дизлайк это false. Отсутствие реакции это null. Но это не совсем корректно - null должен говорить, что объект пуст, а не обозначение стостояние.

Foo { Boolean reacted = null; }

3. Можно создать Enum,

enum Reaction { DISLIKE, NEUTRAL, LIKE }

... но есть решение получше...

4. Представляю вашем вниманию новый тип - Нибулин (neboolean), который кроме значений true и false может принимать значение - neutral.

Foo { neboolean reacted = neutral; }

Теперь по дефолту состояние - нейтральное, лайк - true, дизлайк - false. Идея пришла после прочтения мема - "true neutral".

True? False? А может Neutral?

Прежде чем повторится ответ из мема ниже

True? False? А может Neutral?

хочу сказать что до 1 апреля еще далеко, по-этому решил поделится идеей раньше времени.

3 комментария