/
Программирование
/
Курс Clojure
/

Валидация атомов

Clojure: Валидация атомов

Еще одной из удобных возможностей атомов — валидация. Рассмотрим на примерах:

(def my-atom (atom 0 :validator even?)) ; создаем атом, который валидирует свое состояние на четность

@my-atom ; => 0

(swap! my-atom inc) ; увеличиваем значение атома на единицу
IllegalStateException Invalid reference state  clojure.lang.ARef.validate (ARef.java:33)

(swap! my-atom (partial + 2)) ; увеличим атом на 2

@my-atom ; => 2

Как видно из примера, при попытке изменить атом на некорректное значение, бросается исключение об ошибке изменения. Функция-валидатор может быть какой угодно, главное, чтобы она принимала один аргумент, само значение атома, а возвращать boolean или выбрасывать исключение, которое описывает ошибку валидации (исключения в Clojure обрабатываются так же, как и в большинстве других языков).

Задание

Реализуйте функцию-валидатор vec-even?, которая проверяет, что атом является вектором и все его элементы четные (пустой вектор не является валидным случаем).

(vec-even? [])        ; => false
(vec-even? [0 2 4 6]) ; => true
(vec-even? [1 3 5])   ; => false

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются