Prezentace - jOpenSpace

Transkript

Prezentace - jOpenSpace
Pattern
Type Class!
ve Scale
Jakub Janeček
AVAST Software
Type Class
•
pochází z jazyka Haskell
ghci> :t (==)
(==) :: (Eq a) => a -> a -> Bool
•
ad-hoc polymorfismus
•
type class definuje koncept (“rozhraní”)
•
množina požadavků na nějaký typ
•
•
např. metoda pro řazení hodnot typu T může být napsána
genericky za předpokladu, že víme jak hodnoty typu T
porovnávat
… ale s možností koncepty skládat a bez dědičnosti!
Syntax
•
currying
def cplus(a: Int)(b: Int) = a + b
•
implicitní parametry
def iplus(a: Int)(implicit b: Int) = a + b
•
context bound
def m[T: Context](value: T) = …
def m[T](value: T)(implicit context: Context[T]) = …
Příklad 1
def getCount[T](v: T)(implicit counter: Countable[T]): Int = {
counter.count(v)
}
!
trait Countable[-U] {
def count(value: U): Int
}
!
implicit object StringCountable extends Countable[String] {
def count(value: String) = value.size
}
implicit object ListCountable extends Countable[List[_]] {
def count(value: List[_]) = value.size
}
object ListUniqueCountable extends Countable[List[_]] {
def count(value: List[_]) = value.toSet.size
}
!
> getCount(“hello”) // 5
> getCount(List(1,1,2,2,3,3)) // 6
> getCount(List(1,1,2,2,3,3))(ListUniqueCountable) // 3
Příklad 2
def accept[T: Acceptable](value: T) = value
!
trait Acceptable[U]
!
implicit object IntAcceptable extends Acceptable[Int]
!
scala> accept(100) // OK
scala> accept(100.0) // ERROR
error: could not find implicit value for evidence parameter of type Acceptable[Double]
Příklad 3 - skládání
def min[T](x: T, y: T)(implicit c: Comparable[T]) = {
if (c.less(x, y)) x else y
}
!
trait Comparable[T] {
def less(a: T, b: T): Boolean
}
!
implicit object IntComparable extends Comparable[Int] {
def less(a: Int, b: Int) = a < b
}
!
class ListComparable[U](implicit c: Comparable[U])
extends Comparable[List[R]] {
def less(a: List[U], b: List[U]) = c.less(a.head, b.head)
}
implicit def constructListComparable[V: Comparable] = new ListComparable[V]
!
> min(20, 10) // 10
> min(List(20), List(10)) // List(10)
Použito v praxi
•
Metoda sum na kolekcích (Numeric)
def sum[B >: A](implicit num: Numeric[B]): B
•
Metoda sorted na kolekcích (Ordering)
def sorted[B >: A](implicit ord: Ordering[B]): List[A]
•
CanBuildFrom v kolekcích
•
ScalaZ a obecně v FP
Dotazy?

Podobné dokumenty

TL - Akuterm

TL - Akuterm Tento dokument nevyhodnocuje nebezpecí rozbití skla zpusobené termálním šokem. Dále ve výpoctu (AGC Glass Europe) není zahrnuto riziko samovolné exploze tepelne tvrzeného skla prítomností inkluze s...

Více

Platební systém XPAY

Platební systém XPAY 2. Seznam chybových stavů skryté platební brány Skrytá platební brána v případě chybných vstupních parametrů nebo chybného nastavení reaguje zobrazením chybového stavu. Zde jsou uvedeny jednotlivé...

Více

Stáhnout - Cetelem

Stáhnout - Cetelem obměnit celý šatník, a také mám silné tušení, že bych měla začít pořádně šetřit. Vypuštění každoročních nákupů oděvů o velikost větších je tedy nasnadě (nehledě na koupi nové skříně, krémů proti ce...

Více

Q - ELEKTRIK a.s. - divize klimatizace CENÍK klimafizací a

Q - ELEKTRIK a.s. - divize klimatizace CENÍK klimafizací a CENÍK klimatizací a příslušenství 2016

Více

a příslušenství

a příslušenství Plachta zakrývací 8×12 m standard ƒƒodolná vůči otěru, plísním a kyselině ƒƒmateriál PE vlákna o vysoké hustotě ƒƒoboustranně laminovaná ƒƒnerezavějící oka ve vzdálenosti 1 m č. pol. 4502029500

Více

Clearlite-CZ- Spol. Kovac

Clearlite-CZ- Spol. Kovac hlavní změna v parametrech minimální změna v barevnosti – méně zelenkavé základní sklovina ovlivní ostatní produkty • škála skel low-E • vrstvené bezpečnostní sklo – Stratobel atd. • hlavní změna b...

Více

Stáhnout - Cetelem

Stáhnout - Cetelem příroda nabízela. To mi imponuje. Nemám ráda plýtvání a luxus na úkor životního prostředí. Člověk samozřejmě inklinuje k výrokům, že dříve bylo lépe, a utíká ke starým časům jako do pohádky. Snaží ...

Více

Stáhnout PDF - treninky.cz

Stáhnout PDF - treninky.cz "Když jsem v roce 1998 začínal v pojišťovnictví, nastoupil jsem do firmy a v ní jsem se stal..." Ano, příběh musí být pravdivý a tedy uvěřitelný, inspirující a nejlépe pozitivní. A to ten můj je, p...

Více

Technik v roli obchodníka

Technik v roli obchodníka Zkušení obchodníci, znalí produktu, jsou často více odborníci než prodejci. Noví obchodníci se často orientují na parametry zboží a služeb.

Více