Юра
в расте исчерпывающий матч
Юра
т.е. он тебе не даст что-то не учесть
Konstantin
здесь тоже
Konstantin
я, конечно, не настаиваю, но у нас код стал гораздо лаконичнее и проще в некоторых места после того, как появились енамы и матч-оператор
The Ant
Konstantin
ну нет же
Konstantin
match($foo) {
1 => 'bar',
default => throw new \Exception(),
}
The Ant
крч я не настаиваю, но поаккуратнее с длинными матчами :D
Konstantin
static $arr = [
1 => 'Новый',
// ...
];
return $arr[$this->val] ?? throw new Exception();
The Ant
это да
Konstantin
сравнивать надо с switch-case, чтобы эквивалентно. но большего бреда про асимптотическую сложность я, кажется, в жизни не слышал. ну разве что пару раз от жсеров.
если ты считаешь количество "армов" (веток) в свитч-кейсе, надо понимать, что они все константны - их ну 3, ну 50
Konstantin
а O(3) === O(50) по определению
Юра
Смотря какой там код
Konstantin
и, мягко говоря, это ты не совсем к месту приплёл, сильно похоже на "слышал звон и решил поумничать"
Юра
Хотя да сложно написать не константный свичт )
The Ant
Konstantin
лан, давай на этом закончим 🙂 слабо продуктивно спорить с джунами с апломбом
Юра
Нашли чем меряться в пхп
Юра
Скоростью свитча
Юра
Это меньшая проблема вообще
The Ant
да чо спорить за давно известный факт :D
The Ant
это напоминает тот мем про овсянку с клубникой и порридж
Юра
Вы все такие прям словно везде использьуете SplFixedArray вместо обычного массива )
Юра
И линкед лист вместо array_pop array_unshft
The Ant
свитчкейс \ матч 😄
Павел
У match прикольная штука с bool
$result = match (true) {
$one===$two => ($one+$two),
$other === $one => $other
}
Понятно что можно и без матч, но удобнее/прикольнее.
Юра
Вопрос адептам имутабельных ДТО.. Как быть если надо установить парента у дтошки?
Юра
Какая-то проблема курицы и яйца получается
Vlad
пример приведи чота не могу понять
Юра
$parentDTO = new ParentDTO(children: [$childWhichNeedParent]);
Konstantin
$newDto = $dto->withParent($parent);
внутри (clone $this)->setParent($parent);
Konstantin
setParent - приватный
Konstantin
дто на то и дто, а не ентити, что его можно клонировать, тк в нем нет айдентити
Юра
А паренту получается тогда тоже надо withChildren() ?
Юра
потому что я же не могу создать парента пока нет чайлдов
Юра
короче костыль какой-то
Konstantin
ну типа того, да
Юра
тогда получается это разваливается
Юра
public readonly ?Parent parent;
Юра
потому что если оставить без инициализатора, ругается что не передан парент
Юра
если установить в null, то ты уже не можешь менять больше
Юра
надо значит выносить это из ридонли
Юра
либо делать не клон наверное, а конструктор который будет тупо передавать все проперти.
Юра
но это изврат, вообщем как и все что связано с ДТО
Konstantin
дед заворчал 🙂
Юра
Просто я не понимаю что привносит ДТО кроме гемороя
Konstantin
типизацию
Konstantin
не буду настаивать на том, что тебе это важно. большинству, в последние годы, становится важно. людей заебало программирование на хешмапах, даже сраные фронтендеры начали немного понимать
Юра
У тебя есть энтити типизированная )
Юра
Зачем еще одна прослойка типизированная
Konstantin
это в целом тренд последних лет - добавление типизации в скриптовые языки, поэтому с какой-то долей уверенности можно утверждать, что сообществом это воспользовано
Konstantin
Зачем еще одна прослойка типизированная
ну затем что не должно быть на границе классов (я уже не говорю про более абстрактные материи) массивов кроме случаев когда это список элементов одного типа
Юра
Ладно я понял это чтоюы превратить нетипизированный риквест в типизированный
Konstantin
не можешь ты вызвать FooFactory->createSomeEntity(array $data)
Konstantin
потому что черт его знает что там за $data, а FooFactory->createSomeEntity(SomeDto $data) - уже можешь
Vlad
array{foo:string, bar: int}
Юра
А как ты создаёшь дто?
Konstantin
array{foo:string, bar: int}
это валидировать сложнее, допустим у тебя два стринговых поля - name и surname, если ты их попутаешь местами, ничего страшного не произойдет, и ты этого даже не заметишь. дтошка/во же всегда валидна, тк проверяет соответствие инвариантов в конструкторе (ну, по хорошему если)
Vlad
чего? Дто может быть не валидна
Юра
Ладно всеравно непонятно. Почему нельзя проверять валидность энтити в валидаторе
Konstantin
ну тогда большого смысла в них и правда нет, если это кусок говна, а не данные
Konstantin
и если тебе надо валидировать эту дтошку в каждом методе, ее принимающему
Vlad
Vlad
если ты допускаешь, что сущность может быть не валидна
Vlad
ты что то делаешь не так
Юра
Ну пришел джун и написал new Entity()
Vlad
Юра
Натыкал туда чего попало
Vlad
дто может быть не валидна. дто это просто структура
Юра
Надо запрещать тогда каким-то образом создание энтитей напрямую
Юра
Только через валидную дто
Vlad
Vlad
то есть можно сделать валидную дто, но это надо собирать все исключения
Vlad
и получается клиент получает не все ошибки
Vlad
хуета какая та получается в итоге
Konstantin
не знаю, я не сильно согласен, что это удобно. у меня дто приходит аргументом в 100 методов, мне в каждом из них писать валидацию входящих данных?
Юра
А как ты создаёшь дто?