TGViewer
Хэндлим тему | Дерепко Хэндлим тему | Дерепко @handle_topic · 276 subscribers
Post #122 448
Полезности сегодняшнего дня.

Visitor – удобный паттерн, чтобы пройтись по родительским элементам и дочерним, при это сохраняя какой-то контекст для выполнения действий.

Задача:
- Написать валидатор минут, часов, дней, месяцев, дней недель для крон выражений

Решение №1
- Получает выражение
- Берем первый элемент
- Понимаем что в нем содержится
- Отправляем в валидатор

Минусы в том, что в выражении конкретной позиции может быть несколько типов:
- Перечисление: 1,2,3
- Диапазон: 1-5
- Шаг: 2/3
- Комбинация: 1-5,10-15/2,3,4,5

Как в таком коде достать "число"? Можно регулярками, подстроками, можно забить, поддержать примитивные паттерны.
А можно создать визитор, который будет проходить проходить через нашу функцию когда заходит в "конечное число".

Таким образом, решение №2 очень элегантным:
- Создаем визитор на весь файл, чтобы пройти по всем выражениями
- При заходе в минутный паттерн, создаем новый визитор для минут, описываем нужную логику: разрешены цифры 0-59
- При заходе в часовой паттерт, создаем новый визитор для часов. Разрешены 0-23 числа
- При заходе в месяц можно дополнительно проверить еще и строковое представление
- И так далее

Таким образом, если мы будем парсить минутный диапазон 1-10/2, то наш минутный визитор пройдет через: 1, 10 и 2.
Любое из этих чисел ни при каком условии не должно быть вне диапазона 0-59.

Если мы захотим написать валидатор для диапазона, вы знаете как это можно будет сделать :))))

Пост был в PHPeople еще месяц назад, подписывайтесь через @phpeople_bot
  • 👍 9
  • ❤ 4
  • 🔥 2
More from @handle_topic
  1. Sep 9, 2026Пыхник’26 — целая неделя PHP! С 28 сентября по 2 октября пройдёт Пыхник’26 — онлайн-конфер…
  2. Aug 24, 2026Мой Pull Request в vlucas/dotenv смёржили! Рад ли я? Конечно. Прихнаюсь честно, у меня это…
  3. Aug 5, 2026Jetbrains выделили LSP ядро для Java/Kotlin, так что теперь вся (а вся?) мощщщщь IDEA дост…
  4. Jul 30, 2026Вайбкодеры?
  5. Jul 19, 2026Когда выучил высоконагруженные системы @git_rebase / send memes
  6. Jun 30, 2026Jetbrains Air на Windows! Если вы вдруг разрабатываете на винде (сожалею вам), то можете п…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →