Piszę to pytanie, aby zachować rejestr wzorców projektowych związanych ze Scala, wzorcami standardów lub tylko z tego języka.Wzorce projektowe i Scala
zagadnień związanych:
Dziękujemy wszystkim, którzy przyczyniają
Piszę to pytanie, aby zachować rejestr wzorców projektowych związanych ze Scala, wzorcami standardów lub tylko z tego języka.Wzorce projektowe i Scala
zagadnień związanych:
Dziękujemy wszystkim, którzy przyczyniają
Lista taka została już zebrana. Zobacz https://wiki.scala-lang.org/display/SYGN/Design+Patterns
zacznijmy z "Singleton" :
object SomeSingleton //That's it
ja dodatkowo proponuje "wzór using-funkcje-of-wyższego rzędu" . Zamiast e. sol. Iterując przez kolekcję samodzielnie, podajesz funkcje metodom zapewnianym przez klasy.
W Scali można w zasadzie powiedzieć, co zamierza zrobić:
//declare some example class
case class Person(name: String, age: Int)
//create some example persons
val persons = List(Person("Joe", 42), Person("Jane", 30), Person("Alice", 14), Person("Bob", 12))
//"Are there any persons in this List, which are older than 18?"
persons.exists(_.age > 18)
// => Boolean = true
//"Is every person's name longer than 4 characters?"
persons.forall(_.name.length > 4)
// => Boolean = false
//"I need a List of only the adult persons!"
persons.filter(_.age >= 18)
// => List[Person] = List(Person(Joe,42), Person(Jane,30))
//"Actually I need both, a list with the adults and a list of the minors!"
persons.partition(_.age >= 18)
// => (List[Person], List[Person]) = (List(Person(Joe,42), Person(Jane,30)),List(Person(Alice,14), Person(Bob,12)))
//"A List with the names, please!"
persons.map(_.name)
// => List[String] = List(Joe, Jane, Alice, Bob)
//"I would like to know how old all persons are all together!"
persons.foldLeft(0)(_ + _.age)
// => Int = 98
Robi to w Javie oznaczałoby dotykania elementów kolekcji siebie i mieszać logiki aplikacji z kodem kontroli przepływu.
More information o klasach kolekcji.
Ten miły EPFL paper o deprecjację Wzorzec Obserwator może być interesujące, too.
Typeclasses są jedno podejście do struktury cech wspólnych zajęć gdzie dziedziczenie naprawdę nie pasuje.
To smutne, że "poziom" lub wspólny język programowania jest taki, że te ... konstrukcje ... muszą być wyprowadzone i zwane "wzorami projektowymi" (tak, jakby powinny zapewniać dodatkowe obciążenie :-) –
"Korzystanie z funkcji wyższego rzędu" to strategia GoF – Synesso
Aby uczynić singletons bardziej testowalnym, zawsze lepiej jest zostawić częściowe, jeśli nie pełne wdrożenie w cechę. // kod cecha SomeSingleton { def doSomething1 {} leniwa Val wart1 } Przedmiotem SomeSingleton rozciąga SomeSingleton – Nick
Poniżej znajduje się lista materiałów związanych projektować wzory używając języka Scala:
Zdajemy sobie sprawę, że jest już za późno, ale to naprawdę powinno być wiki społecznościowe –
@Dave Zgoda, nie sądzę, że jest to pytanie zgodne z SO. Ale jestem bardzo zainteresowany widząc odpowiedzi i mam nadzieję, że to będzie trwało! – JAL
Możesz również zamieścić link do [tego pytania] (http://stackoverflow.com/questions/5566708/design-patterns-for-static-type-checking). – ziggystar