Aleksandr
в апсорсе
Alfred
Крылатый
@fvnever https://vk.com/wall-11632794_49402
Vasily
Наброшу на вентилятор:
let inline (|?) (a: 'a option) b = match a with | Some a -> a | None -> b
let inline (|??) (a: 'a Nullable) b = if a.HasValue then a.Value else b
let inline (|*?) (a: string) b = if String.IsNullOrEmpty a then b else a
let fst3 (a, _, _) = a
let snd3 (_, b, _) = b
let thd3 (_, _, c) = c
Vladislav
Vasily
Vasily
Вот из-за такого фшарп и не любят
Vasily
Я считаю, отборная ебанина
Aleksandr
Ну я fst / snd пользуюсь иногда
Aleksandr
Меня не ревьюят, но чувствую себя отличнр
Vasily
fst-то ок
Aleksandr
fst-то ок
Ну от fst до fst3 всего один шажок маленький
Vasily
Vasily
Но меня больше беспокоят магические операторы
Aleksandr
Первый - это алиас к Option.defaultValue по сути
Vladislav
падажди
Aleksandr
Действительно, зачем
Vladislav
фст3 же не дестракт а хуйня какая-то
Vladislav
а не
Vladislav
запутался
Vasily
defaultValue само по себе не всегда полезно
Андрей
Aleksandr
Кортежей то есть
Vasily
Ну все равно
Aleksandr
Ну и чойсы больше 2 оч сомнительная штука
Vasily
А потом говорят
Vasily
Что фп знают
Андрей
Vasily
Ну т.е. вместо нормального проектирования получаем такое вот
Ayrat
Aleksandr
Пайп есть
Ayrat
maybeValue |? defaultValue
Aleksandr
Какая-то экономия на спичках
Ayrat
согласен
Андрей
экономия или нет, но для опшнов неплохо было бы иметь свой стандартный элвис-оператор, поэтому у меня здесь не подгорает
Ilya
А мне нравится |?. Читается хорошо без всяких defaultValue
Aleksandr
Сама идея дефолтвалью - это чеховское ружье
Aleksandr
Которое выстрелит
Ayrat
я согласен. оно обычно или на самом входе в метод (с опциональными аргументами) применяется или один раз в конце метода
Ilya
Может быть. Надо контекст смотреть.
Ayrat
поэтому как оно там выглядит - похуй вообще
Ayrat
до этого там ехал мап через бинд
Ayrat
и я бы не отказался от OPTION-PROPAGATED оператора или сахара как в скала котлене
maybe.map(_.id) //scala
maybe.map{it.id} //kotlin
maybe|> Option.map (fun x -> x.id)
Aleksandr
Впрочем , в конпиляторах всяких defaultValue, например, бывает оч полезен
Aleksandr
Чтобы еррор рекавери делать
Aleksandr
Так что от контекста зависит, да
Roman
Shub
Vasily
Vasily
Поплачьте и вы
Vladimir
так а че плакать, это же наверное прямой копипаст классики
Vasily
Я вот только не понимаю, зачем это все
Ayrat
а зачем тут кастомный резалт?
Ayrat
нельзя было на обычном забацать?
Vasily
Я завтра задам пару вопросов, конечно
Vasily
Но,мне кажется, тут пора закапывать
Ayrat
Vasily
А, это оттуда
Vladimir
Vasily
Тогда многое становится понятным
Vasily
Год 14-й наверное
Ayrat
это ж RAILWAY
Ayrat
я его книгу читал, но прям дословно не помню код
подход да, узнаваем
Vasily
Я уже не помню, какой код писал пару месяцев назад
Vasily
как говорится, найдите ошибку в коде:
let toUnix date = Math.Round((date - DateTimeOffset(DateTime(1970, 1, 1))).TotalSeconds, 0)
Vasily
Даже в таком простом коде на датах подорвались
Андрей
а у нас разве нет готовой константы для эпохи?
Ilya
Есть. DateTime.UnixEpoch
Ilya
А, там оффсет.
Ayrat
Ayrat
и всё
Андрей
и функция для конверсии наверняка тоже
Vladimir
Ayrat
я вот не вижу честно говоря сходу ошибки. ну кроме того что таймстемп в секундах такое себе