WebSharper веб-программирование без слёз Владимир Матвеев, IntelliFactory Антон Таяновский, IntelliFactory
Пример дня: Excel в браузере Редактирование таблиц Добавление формул Сохранение данных на сервере Публикация веб-сервис интерфейса к данным И всё это на F# - благодаря WebSharper Copyright © Kiev ALT.NET #6http:// | 2
Почему WebSharper? Когда пишешь JavaScript, хочется плакать: Нет вывода типов - опечатки приводят к ошибкам Нет толковой среды разработки Нет стандартной платформы, библиотек, коллекций Нет стандарта упаковки модулей и документации Copyright © Kiev ALT.NET #6http:// | 3
Почему WebSharper? Еще хуже дело с клиент-серверными приложениями: Нужно думать о передаче данных и их упаковке Нужно привязывать скрипты, стили и HTML Copyright © Kiev ALT.NET #6http:// | 4
Почему F#? Функциональное программирование Вывод типов Удобная среда разработки Хорошая платформа Copyright © Kiev ALT.NET #6http:// | 5
Комиляция F# в JavaScript Copyright © Kiev ALT.NET #6http:// | 6 namespace Hello module Main = [ ] let rec Fac n = match n with | 0 -> 1 | n -> n * Fac (n - 1) > Hello.Main.Fac(10)
Стандартная библиотека Copyright © Kiev ALT.NET #6http:// | 7 let d = Dictionary() for (k, v) in pairs do d.[k]
Удалённый вызов Copyright © Kiev ALT.NET #6http:// | 8 [ ] let Save (user: User) = database.Save user async { return OK } [ ] let AddAccount() = let user =.. async { let! response = Save user do! Show response } |> Async.Start
Привязки JavaScript библиотек Copyright © Kiev ALT.NET #6http:// | 9 let config = JQueryUI.DialogConfiguration( Draggable = true, Modal = true, Height = 370, Width = 500 Title = "..", CloseOnEscape = true) JQueryUI.Dialog.New(element, config)
Пользовательские привязки Copyright © Kiev ALT.NET #6http:// | 10 [ ] let eval (s : string) = X
Функциональный подход к UI Copyright © Kiev ALT.NET #6http:// | 11 Formlet.Do { let! name = functionName let! text = functionText return name, text } |> Formlet.Flowlet
Функциональная маршрутизация Copyright © Kiev ALT.NET #6http:// | 12 type Actions = | Main | DownloadWorksheet let Sitelet = Sitelet.Content "/" Main mainPage Sitelet.Infer (function | Main -> mainPage | DownloadWorksheet -> download ())
Статическая проверка ссылок Copyright © Kiev ALT.NET #6http:// | 13 fun ctx -> A [Href (ctx.Link Main)] [Text "Home"]
Автоматизация зависимостей Copyright © Kiev ALT.NET #6http:// | 14 module Styles = [ ] type Table() = inherit Resources.BaseResource("Styles.css") [ )] module UI =
К делу! Copyright © Kiev ALT.NET #6http:// | 15
Спасибо за внимание! Copyright © Kiev ALT.NET #6http:// | 16