Алексей Фомкин, Флексис
28 апреля 2016
В Scala всего 40* ключевых слов, тогда как в JS их 46**
Мощные языковые примитивы вместо синтаксического сахара
val xs = List(1, 2, 3)
val obj = Map(
'a' -> 1,
'b' -> 2,
'c' -> 3
)
Невероятные сверхспособности 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!")
}
Невероятные сверхспособности 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)
}
Невероятные сверхспособности Scala
'ul('class /= "list"
'li('class /= "item", "Vodka"),
'li('class /= "item", "Balalayka"),
'li('class /= "item", "Perestroyka")
)
Невероятные сверхспособности Scala