@Fsharp_chat

Страница 122 из 772
Klei
14.05.2017
09:33:39
ну если он сам не можете сообразить какой тип юзать)))
Благодаря пайплайнам и выводу типов в F# принято использовать анемичные модели. Так что в большинстве своем, если ты указываешь тип в сигнатуре, то либо ты делаешь что-то не так, либо ты используешь C#-ориентированные типы. А вообще для таких случаев есть Seq.length.

Friedrich
14.05.2017
09:35:39
Не готов рекомендовать Seq.length, покуда не погляжу реализацию.

Pavel
14.05.2017
09:36:46
Померяй длину бесконечной последовательности

Google
Friedrich
14.05.2017
09:36:49
А в чем проблема?
https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs#L709-L720

Есть «специализация» для массивов, списков и ICollection<'T>.

Не уверен, что такой вот непрямой вызов всегда гарантированно так же заинлайнится JIT, как прямое обращение к Array.Length; скорее всего на SSE можно будет уже не надеяться.

Специальная функция *всегда* лучше, чем обобщённая, если тип тебе заранее известен.

(в плане быстродействия)

Klei
14.05.2017
09:39:09
Попахивает преждевременной оптимизацией.

Friedrich
14.05.2017
09:39:48
Всегда использовать Seq.length в F# или Enumerable.Count в C# — это всегда преждевременная деоптимизация.

Если ты можешь или написать быстрый код, или медленный, и разницы для тебя никакой нету (ну, написать Seq или Array), то выбирай быстрый :)

Klei
14.05.2017
09:40:41
Тем более здесь говорится о функции работающей с list и array, так что тип уже не очень известен.

Friedrich
14.05.2017
09:40:55
Да, ок, в таком случае претензий не имею.

Илья
14.05.2017
09:42:43
слушайте я тут про списки читаю, до ФП еще не дошел, а правда чтоли что к спискам нельзя обращаться по индексу? нафига же они нужны тогда? О_о

там вроде только две операции: добавление в конец :: и объединение @

Friedrich
14.05.2017
09:43:42
слушайте я тут про списки читаю, до ФП еще не дошел, а правда чтоли что к спискам нельзя обращаться по индексу? нафига же они нужны тогда? О_о
Списки нужны за счёт своей персистентности: их удобно дополнять в начале, не изменяя. С точки зрения быстродействия ФП-списки — это полная херня, и массивы (или персистентные векторы, скажем) их всегда разделывают под орех.

Google
Илья
14.05.2017
09:44:16
а то какая-то херня выходит - сгенерировать можно, а пользоваться нельзя

Friedrich
14.05.2017
09:44:37
да я даже не об изменении говорю, а просто - взять элемент по индексу
Ну ты ж понимаешь, какой у него memory layout? Да, по индексу просто так взять нельзя.

Klei
14.05.2017
09:44:55
слушайте я тут про списки читаю, до ФП еще не дошел, а правда чтоли что к спискам нельзя обращаться по индексу? нафига же они нужны тогда? О_о
Лучше дочитай до конца. Там все объяснят. Надеюсь. Если не поймешь, возвращайся. А то мы тут реально продублируем пару следующих глав.

Илья
14.05.2017
09:45:21
Ну ты ж понимаешь, какой у него memory layout? Да, по индексу просто так взять нельзя.
Аа погоди... Тут списки это связные списки чтоли? Т.е. типа LinkedList в C#?

Илья
14.05.2017
09:45:34
Я думал они как в C# фактически динамические массивы

Friedrich
14.05.2017
09:45:38
Да, наподобие его. Правда, в C# он двусвязный, а у нас односвязный.

Evgeniy
14.05.2017
09:46:35
@winged_pegasus Кыш. Сейчас ему все объяснят, и он будет шарить.

Vasily
14.05.2017
09:48:08
:)

Илья
14.05.2017
09:49:16
кстати исключений тут нет?

Vasily
14.05.2017
09:49:30
А нужны?

Илья
14.05.2017
09:49:36
или они не используются по крайней мере так широко как в C#

А нужны?
не знаю, но подозреваю что для ФП наверное не нужны

Vasily
14.05.2017
09:50:20
Вообще чтобы впитать в себя списки надо SICP почитать.

Илья
14.05.2017
09:51:04
А что по твоему ФП?
я еще не понял ?

Google
Илья
14.05.2017
09:51:12
не дошел до этой главы)

Friedrich
14.05.2017
09:51:35
или они не используются по крайней мере так широко как в C#
В C# они тоже не так широко используются, как в Java :)

Vasily
14.05.2017
09:51:39
https://ru.m.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B8_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC

Friedrich
14.05.2017
09:51:57
На самом деле исключения есть, и есть даже дофига удобная функция, чтобы их генерить: failwith

Илья
14.05.2017
09:52:10
В C# они тоже не так широко используются, как в Java :)
ты серьезно? я не знаю насколько они широко в java юзаются, но в C# - исключения наше все

Friedrich
14.05.2017
09:52:51
Жавошники любят бросать исключения даже не в исключительных ситуациях. Поэтому в Java IDE даже обычно нету галочки "ловить все брошенные исключения", потому что отлаживать в этом режиме код просто невозможно.

Vasily
14.05.2017
09:53:01
И есть дофига удобный синтаксис для объявления исключений

Илья
14.05.2017
09:53:01
На самом деле исключения есть, и есть даже дофига удобная функция, чтобы их генерить: failwith
ага я уже столкнулся с ней, но я так понимаю она генерит нетипизированные исключения? они типа все Exception

Friedrich
14.05.2017
09:53:06
В C# же обычно исключения всё-таки используют по назначению за редкими исключениями.

Friedrich
14.05.2017
09:53:58
ага я уже столкнулся с ней, но я так понимаю она генерит нетипизированные исключения? они типа все Exception
Да, везде Exception. Если хочешь генерить типизированные — кажется, функция называется raise.

Vasily
14.05.2017
09:54:09
raise (MyExn()) для любых

Friedrich
14.05.2017
09:56:00
Но в целом мне кажется, что в F# исключения в среднем реже используются в архитектуре приложений. Из методов, которые могут завершиться с ошибкой, чаще возвращают результаты типа Option или Choice, а не выбрасывают исключение.

Илья
14.05.2017
09:56:29
мне что нравится - это отсутствие скобок (ну почти) - код намного читабельнее выходит

Evgeniy
14.05.2017
09:58:03
У Царьпалиса есть хорошая статья про исключения в F#.

https://eiriktsarpalis.wordpress.com/2017/02/19/youre-better-off-using-exceptions/

Но она не для новичков, пожалуй.

Friedrich
14.05.2017
10:03:00
мне что нравится - это отсутствие скобок (ну почти) - код намного читабельнее выходит
...а потом ты начинаешь фигачить везде всякие <| |>, и оказывается, что скобки-то иногда лучше :)

Дед Пегас
14.05.2017
10:03:28
Баланс!

Google
Evgeniy
14.05.2017
11:02:41
Ilja Привет!

Nikolay
14.05.2017
11:06:01
Я довольно редко в C# обращаюсь к элементам списка по индексу

Если конечно это не .Net Framework 2.0 и не Array

А к Seq и List, .[idx] не применимо что-ли?

Roman
14.05.2017
11:09:48
А к Seq и List, .[idx] не применимо что-ли?
К list применимо. Для Seq есть функция Seq.nth по моему так называлась

Летучая
14.05.2017
11:12:20
Evgeniy
14.05.2017
11:13:59
@fvnever Для тех, кому не нравятся отступы, есть verbose syntax. %)

Klei
14.05.2017
12:09:06
Admin
ERROR: S client not available

Evgeniy
14.05.2017
12:46:14
@fvnever Нет, это я про #light off

Friedrich
14.05.2017
12:46:35
Это ещё не задепрекейтили? Я ни разу не видел такого кода :)

Evgeniy
14.05.2017
12:46:57
Ну, так никто не пишет, конечно.

Pig
14.05.2017
13:25:59
Знаменитый ML-ный lack of ad-hoc polymorphism

т.е. если на входе массив то юзать Array.length, а если список то List.length

Это немного печально

Все хорошо в Java с исключениями, но говнокодеры в любом сообществе есть. Исключения и типы-суммы по сути дублирующиеся конструкции.

Google
Friedrich
14.05.2017
13:42:37
Все хорошо в Java с исключениями, но говнокодеры в любом сообществе есть. Исключения и типы-суммы по сути дублирующиеся конструкции.
Я пробовал дебажить веб-приложение на Java, включил ловилку всех исключений, и их там хренова гора.

При этом то же самое с каким-нибудь ASP.NET прокатывает. Там только для редиректов исключения проскакивают в легаси-коде.

В общем, скорее всего, мой камень летит в огород авторов GlassFish или JEE какого-нибудь :)

В пользовательском Java-коде я и правда не замечал, чтобы кто-то злоупотреблял, это правда.

Sergey
14.05.2017
17:03:20
Хммм...теперь f# weekly из первых рук :)
вот https://sergeytihon.com/2017/05/14/f-weekly-20-2017-join-fableconf-in-bordeaux/ с сылочкой на этот чат =)

Летучая
14.05.2017
17:05:54
еееееееееее

Илья
14.05.2017
17:11:56
В чем разница между объявлением списка элементами разделенными запятой и точкой с запятой? [ 1, 2, 3 ] [ 1; 2; 3 ]

Pavel
14.05.2017
17:12:33
В первом случае ты определяешь список туплов из трёх интов

Во втором - лист интов

Илья
14.05.2017
17:12:48
о как...

Pavel
14.05.2017
17:12:54
Первая строчка - краткая версия [ (1, 2, 3) ]

Илья
14.05.2017
17:13:03
а я думал для туплов обязательны скобки ()

в F# нет встроенного стринг формата как в C#? $"{a} + {b}"

Pig
14.05.2017
17:17:11
Это называется строковая интерполяция

Илья
14.05.2017
17:17:30
Это называется строковая интерполяция
ну да хз, я не знал конкретно это слово))

так она есть или нет?

Pig
14.05.2017
17:18:19
Нет

Илья
14.05.2017
17:18:31
жаль(

Pavel
14.05.2017
17:22:58
let s = sprintf s"Hello, %s" "World"

Roman
14.05.2017
17:31:04
let s = sprintf s"Hello, %s" "World"
S перед кавычкой не нужна же

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