Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

08/02/2014

Un peu de Scala

Voici un framework pubsub de la mort qui tue... 

 

trait Idable {

   val id = Bus.getId

   def pub = Bus.pub(this)

   def sub(p:Idable, f:()=>Unit) = Bus.sub(p,f)

}

object Bus {

val H = collection.mutable.HashMap[Long,List[()=>Unit]]()

def pub(p:Idable):Unit = H.get(p.id).map(fs=>fs.map(f=> f()))

def sub(p:Idable, f:()=>Unit):Unit = H.put(p.id,f :: H.get(p.id).getOrElse (List()))

var ID = 0

def getId:Long = {ID+=1; ID}

}

Il s'utilise assez simplement: 

 

class Person (val name:String, var age:Int) extends Idable {
  def setAge(x:Int) = {age = x; pub}
}
object Main extends App with Idable {
  val p = new Person("me",33)
  sub(p, ()=> println("p notified " + p.age))
  p.setAge(34)
}

 

On utilise ici les closures bien sur, mais surtout les traits: Idable contient le comportement nécessaire à la signalisation via l'objet singleton Bus et aussi l'interface d'utilisation : pourvu qu'on soit "Idable", l'id et le Bus sont absolument invisibles. 

Viva Scala ! 

 

 

Commentaires

https://github.com/lihaoyi/scala.rx
est un framework récent, plus puissant que ces quelques lignes...

Écrit par : FrancoisCarmignola | 12/02/2014

Les commentaires sont fermés.