Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемГеоргий Яськов
1 КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ
2 F# 3.0 Information Rich Programming Артем Присяжнюк Технический директор
3 О чем мы будем говорить? Введение в F# Язык для решения повседневных проблем F# TypeProviders Будущее развитие
4 F# - функциональный язык, ориентированный на решение проблем реального мира, позволяет решать сложные задачи с помощью простого кода
5 Простой код
6 Простой код Функции как значения abstract class Command { public virtual void Execute(); } abstract class RoverCommand : Command { protected Rover Rover { get; private set; } public RoverCommand(MarsRover rover) { this.Rover = rover; } class BrakeCommand : RoverCommand { public BrakeCommand(Rover rover) : base(rover) { } public override void Execute() { Rover.Accelerate(-1.0); } class TurnLeftCommand : RoverCommand { public TurnLeftCommand(Rover rover) : base(rover) { } public override void Execute() { Rover.Rotate(-5.0); } C# F# type Command = Rover -> unit let BrakeCommand = fun rover -> rover.Accelerate(-1.0) let TurnLeftCommand = fun rover -> rover.Rotate(-5.0 )
7 Простой код Работа с данными Tuple Swap (Tuple t) { return new Tuple (t.Item2, t.Item1) } ReadOnlyCollection > Rotations (Tuple t) { new ReadOnlyCollection (new Tuple [] { new Tuple (t.Item1,t.Item2,t.Item3); new Tuple (t.Item3,t.Item1,t.Item2); new Tuple (t.Item2,t.Item3,t.Item1); }); } int Reduce (Func f,Tuple t) { return f(t.Item1) + f(t.Item2) + f (t.Item3); } C#
8 Простой код Работа с данными Tuple Swap (Tuple t) { return new Tuple (t.Item2, t.Item1) } ReadOnlyCollection > Rotations (Tuple t) { new ReadOnlyCollection (new Tuple [] { new Tuple (t.Item1,t.Item2,t.Item3); new Tuple (t.Item3,t.Item1,t.Item2); new Tuple (t.Item2,t.Item3,t.Item1); }); } int Reduce (Func f,Tuple t) { return f(t.Item1) + f(t.Item2) + f (t.Item3); } C# F# let swap (x, y) = (y, x) let rotations (x, y, z) = [ (x, y, z); (z, x, y); (y, z, x) ] let reduce f (x, y, z) = f x + f y + f z
9 DEMO Работа с последовательностями
10 F# и немного математики List.map2 (-) x y |> List.map square |> List.map2 (*) weights |> List.sum |> sqrt
11 F# 3.0 Information Rich Programming
12 Почему важно? Программирование в сети
13 Дилемма Мы живем в информационно богатой среде Но языки не имеют развитой инфраструктуры для работы с данными
14 Проблемы Статическая типизация и внешние источники данных Ручная интеграция генерации кода с процессом сборки, контроля версия и т.д. Нет элегантного пути отражать изменения в схеме данных
15 С другой стороны… Источники данных часто предоставляют хорошее описания схем данных Статическая типизация должна помогать, а не мешать в работе
16 Ответ – F# Type Providers
17 TypeProviders Встроенные SqlDataConnection SqlEntityConnection ODataService WsdlService Сторонние Regex FileSystem Csv Excel JSON XML Registry XAML AppSettings Дальше больше…
18 Демо 2 TypeProviders и работа с внешними источниками данных
19 Что получается? Можем работать с структурированными онлайн источниками данных –Нет кодогенерации! Имеем статическую проверку типов! –Можем определить изменения схемы Поддержка инструментов Visual Studio и IntelliSense!
20 Демо 3 F# + Type Providers + WPF Type Providers – не только данные!
21 Полное дерево XAML
22 Итого Можем безопасно работать с несколькими источниками данных используя Type Providers Доступ к разнородным источникам данных с помощью унифицированного интерфейса F# отлично работает для программной логики
23 Переносимые библиотеки Одна библиотека – любая платформа. Silverlight, Metro.
24 Что дальше? Облака, облака, облака Azure С помощью Computation expressions можно расширять язык: –async { … }, query { … }, seq { … } – это не фича языка. Это библиотеки которые расширяют язык с помощью Computation expressions –ждем cloud { … }
25 Спасибо Вопросы?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.