@Fsharp_chat

Страница 288 из 772
Vladimir
25.08.2017
11:27:40
ладно, спор не имеет смысла) технически можно сделать и так и так, но для производительности быстрее всего никуда не оборачивать и оставить Nullable и строку

illiatshurotshka❄️
25.08.2017
11:27:51
как не имеет смысла

надо бить по рукам за nullable

Google
Vladimir
25.08.2017
11:29:08
на самом деле я так и сделал)

но если бы были совместимы строка и nullable, то возможно не делал бы

illiatshurotshka❄️
25.08.2017
11:29:55
>делать лишние типы просто ради того чтобы их обрабатывать

Evgeniy
25.08.2017
11:30:08
Artemy
25.08.2017
11:34:25
а зачем тебе option тогда вообще?
Просто ещё null возможен

illiatshurotshka❄️
25.08.2017
11:34:35
откуда

если ты не работаешь с C# кодом то у тебя никаких null нигде быть не должно

Evgeniy
25.08.2017
11:36:18
Правило простое. От null нужно избавляться прямо в месте его появления.

Artemy
25.08.2017
11:36:41
Это да

illiatshurotshka❄️
25.08.2017
11:37:28
не понимаю смысла оборачивать в лишние типы

Artemy
25.08.2017
11:37:29
Вообще да, идея со своим DU хорошая. Удобно + сразу отпадает "запутывание"

Vladimir
25.08.2017
11:38:23
Правило простое. От null нужно избавляться прямо в месте его появления.
если у тебя поле string, null может придти на десереализации или еще откуда угодно из стороннего сервиса

Google
Vladimir
25.08.2017
11:38:46
прямо там это где?)

illiatshurotshka❄️
25.08.2017
11:39:08
DU это ADT?

Evgeniy
25.08.2017
11:39:08
После десериализации или получения ответа от стороннего сервиса.

Vladimir
25.08.2017
11:39:18
придется всегда писать свой десериализатор в таком случае чтобы в option преобразовывался или в свой тип

Evgeniy
25.08.2017
11:39:20
Vladimir
25.08.2017
11:39:28
ну вот. Неудобство)

Evgeniy
25.08.2017
11:39:58
Небольшая плата за null safety.

illiatshurotshka❄️
25.08.2017
11:40:01
если тип строки уже включает возможный вариант ее отсутствия

Evgeniy
25.08.2017
11:41:13
а зачем option
C# библиотеки для сериализации работают с null, но плохо работаю с ADT.

Приходится делать немного дополнительной работы.

Evgeniy
25.08.2017
11:42:43
Есть конвертеры, конечно. Для того же Json.NET

У Vladimir серьезные требования по перформансу.

Я не знаю, что сейчас используется, и как это работает с типами F#.

Vladimir
25.08.2017
11:44:12
сейчас переписал BindQueryString из жирафа

https://github.com/Lanayx/PerformanceTest/blob/Parser/src/Parser.fs

illiatshurotshka❄️
25.08.2017
11:46:18
а зачем использовать F# если очень важна скорость?

Vladimir
25.08.2017
11:46:18
названия методов конечно надо порефакторить, но за логику кода я горжусь) возможно конечно его и покрасивей можно сделать

Google
Vladimir
25.08.2017
11:46:34
затем что можно и F# использовать несмотря на скорость)

Astmatik
25.08.2017
11:51:04
Обожаю этот ответ

Evgeniy
25.08.2017
11:52:40
Я добавлю немного контекста. Vladimir участвует в HighLoad Cup. Почему бы не F# + Kestrel? :)

Я не вижу ни одной причины не использовать такой стек.

illiatshurotshka❄️
25.08.2017
11:53:04
аа это

Fill
25.08.2017
11:53:48
while true do Прочитал про ЯП->понял, что это не серебрянная пуля->пошёл читать про другой яп

illiatshurotshka❄️
25.08.2017
11:54:51
почему не рекурсивная функция

Vladimir
25.08.2017
11:55:47
а как строку к числу преобразовать да еще и без эксепшна?

Vasily
25.08.2017
11:56:09
Ну довольно просто

На самом деле

Ща

Vladimir
25.08.2017
11:56:33
или ты про httpContext.Request.Query.TryGetValue ?

Vlad
25.08.2017
11:56:41
Int32.TryParse ?

Vasily
25.08.2017
11:56:44
Да

int32.TryParse

Он не слишком эффективен

Там техника вычитания из чара значения 0x30

И надо проверять, что он меньше 9

Google
Vasily
25.08.2017
12:03:19
Или равен

Дальше умножение на нужную разрядность всего, что получилось

https://ayende.com/blog/176034/making-code-faster-the-interview-question

В блоге есть техника

Vladimir
25.08.2017
12:06:19
есть код?) с нуля реализовывать точно не буду

Vasily
25.08.2017
12:06:36
https://ayende.com/blog/176037/making-code-faster-going-down-the-i-o-chute

Vladimir
25.08.2017
12:07:21
там нужен имеено TryParse

Vasily
25.08.2017
12:07:31
Ну всегда можно дописать

Же

Возврат из цикла

В виде кортежа

Один if

Vladimir
25.08.2017
12:09:22
и не вижу обработку минуса

и переполнения инта

Vasily
25.08.2017
12:10:19
Минус по идее значит, что не распарсилось

Vladimir
25.08.2017
12:10:31
я про такой минус -200

Aleksander
25.08.2017
12:10:31
Там техника вычитания из чара значения 0x30
Я эту технику в школе на паскале использовал еще)

Vasily
25.08.2017
12:10:32
Плюс если за миллион перевалило, то тебе дальше не надо

Vladimir
25.08.2017
12:10:36
это тоже инт)

Vasily
25.08.2017
12:10:56
Тебе нужно как можно раньше отсечь невалидные значения

Google
Vasily
25.08.2017
12:11:08
Те, которые больше миллиона с чем-то и меньше нуля

Vladimir
25.08.2017
12:11:12
так -200 это валидный инт

мне такие приходят)

ибольше миллиона тоже

там таймстемпы фигачат

Vasily
25.08.2017
12:12:20
Миллион - задаваемое ограничение парсинга

Нижняя граница у тебя 0

Vladimir
25.08.2017
12:12:46
я и говорю что его не нужно задавать)

Vasily
25.08.2017
12:12:49
Верхняя плавает

Но пользователей ты знаешь максимум

Vladimir
25.08.2017
12:13:00
и нижняя граница тоже может быть минус миллион)

Vasily
25.08.2017
12:13:06
Локейшнов тоже

И визитову

Vladimir
25.08.2017
12:13:22
не только айдишки там, говорю же таймстемпы в интах передают

или даже в лонгах

Vasily
25.08.2017
12:13:44
Ну для таймстемпа парс лонга

Там разницы нет

В алгоритме

Идешь по циклу

Проверяешь, чтобы не больше верхней границы

И чтобы цифра <=9

Если условие не выполняется, возвращаем false,x

Страница 288 из 772