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

illiatshurotshka❄️
25.08.2017
11:27:51
как не имеет смысла
надо бить по рукам за nullable

Evgeniy
25.08.2017
11:28:38

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

illiatshurotshka❄️
25.08.2017
11:34:35
откуда
если ты не работаешь с C# кодом то у тебя никаких null нигде быть не должно

Nikolay
25.08.2017
11:35:28

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

Google

Evgeniy
25.08.2017
11:38:39

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.
Приходится делать немного дополнительной работы.

illiatshurotshka❄️
25.08.2017
11:41:28

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# использовать несмотря на скорость)

Evgeniy
25.08.2017
11:46:48

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
почему не рекурсивная функция

Vasily
25.08.2017
11:54:57

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

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