J'écris cette question pour maintenir un registre des modèles de conception associés à Scala, des modèles de normes ou seulement à partir de ce langage.Design Patterns et Scala
des questions associées:
Merci à tous ceux qui contribuent
J'écris cette question pour maintenir un registre des modèles de conception associés à Scala, des modèles de normes ou seulement à partir de ce langage.Design Patterns et Scala
des questions associées:
Merci à tous ceux qui contribuent
Une liste comme celle-ci a déjà été collationnée. Voir https://wiki.scala-lang.org/display/SYGN/Design+Patterns
Commençons par le "pattern Singleton":
object SomeSingleton //That's it
Je propose en outre la "Utilisation-fonctions de-ordre supérieur modèle". Au lieu de e. g. itérer à travers une collection par vous-même vous fournissez des fonctions aux méthodes que les classes fournissent.
Dans Scala vous dites essentiellement ce que vous avez l'intention de le faire:
//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
Faire cela en Java aurait signifié de toucher les éléments d'une collection et vous mélangez votre logique d'application avec le code de contrôle de flux.
More information concernant les classes de la collection.
Cette belle EPFL paper à propos dévalorisant le motif d'observateur pourrait être intéressant aussi.
Typeclasses sont une approche pour structurer les caractéristiques communes des classes où l'héritage ne correspond pas vraiment.
Il est triste que le "niveau" ou le langage de programmation commun est tel que ces ... constructions ... doivent être mises en évidence et appelé "modèles de conception" (comme s'ils devaient justifier une charge supplémentaire :-) –
"Utiliser des fonctions de modèle supérieur" est la stratégie du GoF – Synesso
Pour rendre les singletons plus testables, il est toujours préférable de laisser partiel sinon plein implémentation dans un trait. // Code trait SomeSingleton { def doSomething1 {} val val1 paresseux } SomeSingleton objet étend SomeSingleton – Nick
Voici une liste des documents liés à la conception des modèles en utilisant un langage Scala:
Réalisant qu'il est trop tard, mais ce devrait vraiment être la communauté wiki –
@Dave D'accord, je ne pense pas que ce soit une question SO juridique. Mais, je suis très intéressé à voir les réponses et j'espère que ça continue! – JAL
Vous pouvez également créer un lien vers [cette question] (http://stackoverflow.com/questions/5566708/design-patterns-for-static-type-checking). – ziggystar