"Зачем учить f# и как начать: парсим интернет...
TRANSCRIPT
Зачем учить F# и как начатьАндрей ЧебукинThe Secret Circle Solutions
[email protected]/in/xperiandrifb.com/xperiandrivk.com/xperiandri
Императивный против функциональногоМеняем состояние• Запись входных данных
в память• Вычисление• Запись результатов в
память• Основной оператор -
присвоение
Применяем функции• Применение функций
ко выходным данным• Передача результатов
или функций на вход другим функциям
• Нет присвоения
Каррирование функции (Curry)преобразование функции от многих аргументов в функцию, берущую свои аргументы по одному
Специальные типы данных• Неизменяемые
(immutable)• Со специальным
синтаксисом для создания частично изменённой копии
• С функциями высших порядков
Итоги• Всё есть функция• Функция высшего порядка – принимает другую функцию
параметром• Прозрачность ссылок – всегда известно единое значение• Истинные (однозначные) функции – результат всегда одинаков
для одинаковых входных параметров• Вывод типов – компилятор обычно сам выведет все типы• Нет присвоения – используем рекурсию и связывание с
именем• Специальные типы – типы работающие без присвоения
Примитивные типы данныхbool Booleanbyte Bytesbyte SByteint16 Int16uint16 UInt16int Int32uint32 UInt32int64 Int64uint64 UInt64
nativeint IntPtrunativeint UIntPtrchar Charstring Stringdecimal Decimalunit not applicablevoid Voidfloat32, single Singlefloat, double Double
Запись (record)
Неизменяемый типЛегко создать копию с изменением некоторых значенийВстроенное сравнение по значению
Активный шаблон (active pattern)
Как функция проверки возвращающая необязательный тип или размеченное объединение
Коллекции: поискC# F#
Single exactlyOne, pick
SingleOrDefault tryPick
All, TrueForAll forall, forall2
Any, Exists exists, exists2
Contains contains
ElementAt item, nth
ElementAtOrDefault tryItem
C# F#
Find find, tryFind
FindIndex findIndex, tryFindIndex
FindLast findBack, tryFindBack
FindLastIndexfindIndexBack, tryFindIndexBack
First, Last head, last
FirstOrDefault tryHead
IndexOf, LastIndexOf нет
LastOrDefault tryLast
КоллекцииПроекция, сортировка, групп.C# F#
ConvertAllmap, map2, map3, mapi, mapi2
ForEach iteri, iteri2Select Seq.map
через Select pairwiseнет indexedOrderBy sortBy, sortWith, sort
OrderByDescendingsortByDescending, sortDescending
Reverse Rev
GroupBy groupBy
GroupJoin нет
ФильтрацияC# F#
Distinct distinct, distinctBy
FindAll filter
GetRange нет
OfType через pick
Skip skip
SkipWhile skipWhile
Take take
TakeWhile takeWhile
Where Seq.where
Select + Where chooseSkip(1) tail
КоллекцииАггрегацияC# F#
Aggregate
fold, fold2, foldBack, foldBack2, mapFold, mapFold2, reduce, reduceBack, scan, scanBack
Average averageBy, average
Max max, maxBy
Min min, minBy
Sum sum, sumBy
нет permute
ПреобразованиеC# F#
AsEnumerable toSeq
AsParallel нет
AsQueryble нет
AsReadOnly уже такой
Cast через map
CopyTo toArray
ToArray toArray
ToList Нет
ToDictionary Map.ofList
ToLookup нет
КоллекцииСлияние, и множественноеC# F#
Concat append
Except except, Set.difference
Intersect Set.intersect
Join нет
Union Set.union
Zip zip, zip3
SelectMany нет
нет Set.intersectMany
нет Set.unionMany
нет concat
Разделение, инициализацияC# F#
нет unzip, unzip3нет Windowedнет partitionнет splitIntoнет splitAtнет unfoldнет initEnumerable.Empty emptyEnumerable.Repeat replicateнет singletone
Поставщики типов (type providers)
Всегда актуальная схема данныхПроверка в момент компиляции того, что обычно вываливается в момент выполнения
Поставщики в наличииВстроенные• SqlDataConnection• SqlEntityConnection• ODataService• WsdlService
Сторонние• Regex• FileSystem• Csv• Excel• JSON• XML
• Swagger• Registry• XAML• AppSettings• И другие…
Помимо .NET Native F# всё более активно используется в Microsoft. Мы в процессе внедрения F# в .NET Core. Мы замечаем, что команды внутри Microsoft используют, а стартапы внедряют F# активнее