Roman
Vasily
Насаммонили
Andrew
)))
Roman
но ты задавай вопрос конкретный)
Roman
А так да, как и сказали, это тип с приватным конструктором
Roman
Суть в том, чтобы прибить гвоздями валидацию к типу
Vasily
Есть ещё эзотерическая практика с модулями
Vasily
Но тоже такое
Roman
Дабы за соблюдением валидации следил компилятор, а не юнит тесты
Roman
Vasily
Начнем с того, что компилятор тут вряд ли поможет
Andrew
Скорее тут ограничение на то, каким образом будет создаватьсят ип
Andrew
Чтобы сразу обьявить функцию фабрику чтобы только через нее могли создать и провалидировать
Vasily
поясни
Начнем с того, что номер карты это строка
Roman
Начнем с того, что компилятор тут вряд ли поможет
почему? Вот нужен тебе где-то валидный кард намбер, ты используешь там этот тип. Соответственно, кто-то должен этот тип инстанциировать. Поскольку конструктор приватный, можно только через статический метод со встроенной валидацией
Vasily
Соответственно функции валидации выглядят как string ->string option
Vasily
И применяются через Option.bind
Andrew
Я так понял тут прикручивать резалт не оч?
Andrew
Или оч
Vasily
Ну я бы не стал
Vasily
Резалт в данном случае - тот же опшн
Vladislav
Если тебе надо «мне либо спарсилось либо похуй» то опшн
Igor
так там сейчас есть текст ошибки, его можно показать, залогировать и т.д.
Vladislav
Если что-то вменяемое то резалт
Vasily
И нужен только если нужно иметь информацию об ошибке
Vasily
Но обычно не нужно
Vasily
Ну или кидать через эвент какой
Roman
и сам option обычно подразумевает, что значение необязательное, а не то, что там необходима валидация, и ее можно не пройти
Vladislav
Roman
Vladislav
Ну можно создать и пофиг
Andrew
Roman
Ну можно создать и пофиг
я не уверен, что мы про одно и то же.
Я говорю про следующий кейс: вот я нахожусь в недрах доменной логики и хочу что-то сделать с использованием номера карты. В этом куске кода/слое я ожидаю, что номер валидный, потому что валидация должна была случиться раньше. С помощью такого типа я могу это гарантировать, и при поддержке кода мне все будет мгновенно ясно. Система с опшнами такого не дает
Roman
Да и я не вижу, в чем проблема: объявление типа копеечное, использование простое и удобное
Andrew
Я правильно суть понял? Пример не реальный, просто накидал для наглядности
Roman
типа того, ага
Vasily
Roman
Первый шаг к тайп астронавтике
на нем можно остановиться же. Я ни в коем случае не предлагаю делать зависимые типы или использовать IO в таких фабричных методах
Vasily
С моей точки зрения все же переусложнение
Andrew
@atsapura а как быть с with в таком случае?
Andrew
Писать еще один криейт?
Andrew
Это я про рекорды
Andrew
Типо чтобы поменять 1 поле и получить новый рекорд
Andrew
Такое не прокатит?
Roman
ничего не понял
Ilya
ничего не понял
Хочет в рекорды прикрутить валидацию, причём, чтобы валидация работала, когда копируешь рекорд с помощью with.
Andrew
Roman
Хочет в рекорды прикрутить валидацию, причём, чтобы валидация работала, когда копируешь рекорд с помощью with.
если речь про то,что у рекорда приватный конструктор — то вообще никакого with там не будет, и внутренности рекорда, как и его создание, будет ограничено модулем/неймспейсом, где он объявлен. Если речь про то, чтобы использовать такой тип в публичном рекорде — то сам тип ты инстанциируешь отдельно от него, так что рекорд тут вообще не при чем, и with в нем будет работать как обычно
Roman
ну, я не знаю, как объявлен гудс, но вон, выше написал
Roman
если делаешь коструктор рекорда приватным, его внутренности не видны тоже
Andrew
Тоесть мне нужно менять его только с помощью методов обьявленых в гудс?
Andrew
Ну тоесть возвращать новый измененый
Roman
покажи, как гудс объявлен
Andrew
Roman
ну геморройно так будет. не надо приватные рекорды делать
Andrew
По идее я могу запихнуть валидацию напрямую в компоненты гудс и сделать публичным сам гудс
Roman
именно
Andrew
Типо если я их сделаю как сингл кейс юнион тайп
Andrew
Понял, спасибо
Roman
нзч
Igor
по моему тут перебор с проверкой меньше нуля, можно было выбрать просто другой тип
Andrew
Andrew
Ествественно в данном случае оверхед лютый
Andrew
Как и тут, но смысл я понял
Roman
Vladimir
а там validationError специальный тип чтобы можно было ошибки комбинировать?
Roman
Vasiliy
Valve решила снять с производства Steam Controller.
Когда текущую партию распродадут, он отправится к Steam Machines и Steam Link — в небытие
https://dtf.ru/hard/84186
Ilya
*убежал за попкорном*
Ilya
Могу от себя предложить вариант с правилами валидации, которые закидываются в фабрику, а она возвращает валидирующее правило, которое уже можно передать в конструктор для создания номера карты.
Roman
Romɑn
Что вызывает боль и страдания в емаксе?
Romɑn
Отстуствие 6-го пальца.
Shub
Value ты вынужден создать, потому что у тебя паттерн матчинг отвалился