Scala для супергеройского фронтенда
Алексей Фомкин, Флексис
28 апреля 2016
Почему Scala это просто
В Scala всего 40* ключевых слов, тогда как в JS их 46**
Почему Scala это просто
Мощные языковые примитивы вместо синтаксического сахара
val xs = List(1, 2, 3)
val obj = Map(
'a' -> 1,
'b' -> 2,
'c' -> 3
)
Почему Scala это просто
- Предсказуемый (No WAT)
- Язык регулярно чистят от старого
Строгая статическая типизация
Невероятные сверхспособности Scala
val x = "Hello"
x / 2
// value / is not a member of String
Мощная библиотека коллекций
Невероятные сверхспособности Scala
val masha = ???
val allPersons = ???
def friendsOf(xs: Person*) =
xs.flatMap(x =>
allPersons.filter(_.isFriendOf(x)).
distinct
friendsOf(masha)
// Условная регулярка
val Pattern = """(\d+).(\d+).(\d+)""".r
"28.04.2016" match {
case Pattern("22", "04", _) =>
println("It's Lenins birthday!")
case Pattern(day, month, year) =>
startPartyAt(day, month, year)
case _ =>
throw new Exception("It's not a date!")
}
Pattern matching
Невероятные сверхспособности Scala
// Объявляем AST
trait PseudoHtml
case class Node(name: Symbol, children: Seq[PseudoHtml]) extends PseudoHtml
case class Attribute(name: Symbol, value: String) extends PseudoHtml
case class Text(value: String) extends PseudoHtml
// Объявляем сам eDSL
implicit def stringToPseudeHtmlText(s: String) = Text(s)
implicit class GenPseudoHtml(val symbol: Symbol) {
def apply(xs: PseudoHtml*) = Node(symbol, xs)
def /=(value: String) = Attribute(symbol, value)
}
Дружественность к eDSL
Невероятные сверхспособности Scala
'ul('class /= "list"
'li('class /= "item", "Vodka"),
'li('class /= "item", "Balalayka"),
'li('class /= "item", "Perestroyka")
)
Дружественность к eDSL
Невероятные сверхспособности Scala
Scala транслируется в JavaScript
- Все пакуется в один файл
- Неиспользуемый код удаляется
- Оптимизируется через Closure Compiler
Scala транслируется в JavaScript
- Наш гигантский SPA занимает всего 1,3 MB
- А в сжатом виде всего 290 KB
- Туда включен код компонентов
- И даже часть CSS
Scala транслируется в JavaScript
- Полная оптимизация - 3 минуты
- Обычная сборка с нуля - 80 сек.
- Инкрементальная компиляция - 8 сек.
Scala транслируется в JavaScript
- Двустороннее взаимодействие с JS
- Трансляция биндингов TS в Scala.js
Поддержка IDE
- Автоимпорт проектов
- Точное автодополнение
- Точная навигация по коду
Вопросы?
mjs30-scala-superhero
By Aleksey Fomkin
mjs30-scala-superhero
- 1,138