state-machine-if-improves-understandinglisted
Install: claude install-skill InExSu/claude-skills
# State Machine and SRP — когда использовать switch машину состояний Шалыто
## Правило выбора
Перед тем как писать switch машину состояний Шалыто, проверь: есть ли хотя бы один из признаков
сложности. Если нет — пиши обычный код с SRP.
---
## Когда switch машина состояний Шалыто оправдана
Используй switch машину состояний Шалыто если есть **хотя бы один** из признаков:
- **Нелинейные переходы** — из одного состояния можно попасть в разные
следующие в зависимости от условий
- **Повторные входы** — состояние может быть достигнуто из нескольких других
состояний
- **Пропускаемые состояния** — часть состояний выполняется не всегда
- **Цикл обработки с условным продолжением** — например, постраничная
загрузка, retry-логика, обход дерева
- **Явная конечность** — логика моделирует протокол, парсер, воркер с
жизненным циклом
### Пример — оправданная switch машина состояний Шалыто
```php
// Постраничная загрузка: fetch → check → fetch или finish
case 'fetch_Page':
$result = API_Fetch($ns, $page);
$state = $result['has_More'] ? 'fetch_Page' : 'data_Process';
break;
```
---
## switch или match
Внутри машины состояний можно использовать как `switch`, так и `match` — выбирать тот, который нагляднее.
Использовать **`match`** если:
- Каждое состояние возвращает значение (новое состояние, результат)
- Тело каждой ветки — одно выражение
- Важна строгая проверка без неявного приведения типов
```php
// match нагляднее когда состояние — это просто переход
$state