2.0Kпросмотров
32.8%от подписчиков
23 февраля 2026 г.
📷 ФотоScore: 2.2K
🦀 Rust: Parse, don’t validate Большинство ошибок в коде появляются из-за одной проблемы - мы проверяем данные, но потом забываем про эти проверки. Классический подход:
- получили строку
- где-то вызвали validate()
- дальше передаём её по коду И надеемся, что везде проверка была выполнена. В Rust используют другой принцип: Parse, don’t validate - не проверяй данные, а сразу преобразуй их в корректный тип. Идея:
- принимаем небезопасный input
- парсим его в специальный тип (newtype)
- если тип создан — данные уже гарантированно валидны
- дальше компилятор следит за инвариантами Пример: struct Email(String); impl Email { fn parse(input: &str) -> Result<Self, String> { if input.contains("@") { Ok(Email(input.to_string())) } else { Err("Invalid email".into()) } }
} Теперь: • нельзя случайно использовать невалидный email
• проверки не размазаны по коду
• меньше багов
• безопасность на уровне типов Это и есть type-driven design:
сначала проектируешь типы, потом код становится проще и надёжнее. Меньше runtime-ошибок.
Больше гарантий от компилятора. Разбор:
https://harudagondi.space/blog/parse-dont-validate-and-type-driven-design-in-rust/