Programación funcional y reactiva - Computación
Introducción a la programación funcional reactiva
Programación reactiva
Reactiva: que produce una reacción
Acciones sobre elementos de la GUI
Aproximaciones
Programación reactiva
Pero es posible reaccionar a otros elementos
Otras reacciones
Programación reactiva
Manejo de datos
Enfoques
Programación reactiva
Functional reactive programming
Enfoques
Eventos vs Comportamientos
Diferencias
Functional Reactive Programming
Enfoques
¿Cómo hacer algo parecido usando PF?
Functional Reactive Programming
Definición
Una forma de expresar un programa como una reacción a sus entradas o como un flujo de datos.
Functional Reactive Programming
Scala.Rx
Functional Reactive Programming
Ejemplo
En un proyecto basado en sbt
libraryDependencies += "com.lihaoyi" %% "scalarx" % "0.4.1"
Cosas útiles
sbt console
import rx._
implicit val ctx: Ctx.Owner = Ctx.Owner.safe()
Functional Reactive Programming
Ejemplo
En un proyecto basado en sbt
libraryDependencies += "com.lihaoyi" %% "scalarx" % "0.4.1"
Functional Reactive Programming
Ejemplo
Functional Reactive Programming
Ejemplo
import rx._
object Ejemplo2 extends App{
val a = Var(1)
val b = Var(2)
val c = Rx{ a() + b()}
val d = Rx{ c() * 5}
val e = Rx{ c() + 4}
val f = Rx{ d() + e() + 4}
println(f.now)
a() = 3
println(f.now)
}
Functional Reactive Programming
Ejemplo
import rx._
object Ejemplo2 extends App{
val a = Var(1) // 1
val b = Var(2) // 2
val c = Rx{ a() + b()} // 3
val d = Rx{ c() * 5} // 15
val e = Rx{ c() + 4} // 7
val f = Rx{ d() + e() + 4} // 26
println(f.now) // 26
}
Functional Reactive Programming
Ejemplo
import rx._
object Ejemplo2 extends App{
val a = Var(1)
val b = Var(2) // 2
val c = Rx{ a() + b()} // 5
val d = Rx{ c() * 5} // 25
val e = Rx{ c() + 4} // 9
val f = Rx{ d() + e() + 4} // 38
println(f.now)
a() = 3 // 3
println(f.now) // 38
}
Functional Reactive Programming
Observers - Obs
import rx._
object Ejemplo3_Observers extends App{
val a = Var(1)
var count = 0
val o = a.trigger{
count = a.now + 1
}
println(count)
a() = 4
println(count)
}
Obs pueden ser creados a partir de Rx o Var y pueden usarse para crear efectos colaterales cuando cambian.
Functional Reactive Programming
Observers - Obs
import rx._
object Ejemplo3_Observers extends App{
val a = Var(1)
var count = 0
val o = a.trigger{
count = a.now + 1
}
println(count)
a() = 4
println(count)
}
¿Qué valores imprimen los programas?
import rx._
object Ejemplo3_Observers extends App{
val a = Var(1)
var count = 0
val o = a.triggerLater{
count = a.now + 1
}
println(count)
a() = 4
println(count)
}
Functional Reactive Programming
Kill Obs
import rx._
object Ejemplo5_KillObservers extends App{
val a = Var(1)
val b = Rx{ 2 * a()}
var target = 0
val o = b.trigger{
target = b.now
}
println(target)
a() = 2
println(target)
o.kill()
a() = 3
println(target)
}
Es posible "apagar un Obs" usando el método kill.
Functional Reactive Programming
Determinar la salida
Determine la salida del siguiente programa
Trabajo de consulta
Trabajo de consulta
Detalles
Proyecto Integrador o Bimestral
Proyecto Integrador o bimestral
Entrega 1
Proyecto Integrador o bimestral
Comentarios entrega Nro. 1