Saltar a contenido

Sesión 6: Reconocimiento de patrones

Patrones por clases

Nos permite declarar directamente las clases y sus clases hijas sin tener que definirlas en DETALLE

Podemos declarar un trait o una clase abstracta y extenderla

trait x
case class y(a:Int) extends x
case class z(b:Int) extends x

object y {
    def apply(a:Int) new y(a)
}
object z {
    def apply(b:Int) new z(b)
}

Reconocimiento de patrones

Lo hacemos con match

abstract class Empleado
case class Ejecutivo(n:Int)
case class Operativo(s:String)
case class Externo(t:Int,f:Int)

//Reconocer un objetivo
val obj = new ...
obj match {
    case Ejecutivo(10) =>
    case Ejecutivo(d) => ...
    case Operativo(s) => ...
    case Externo(t,f) => 
    case _  : =>
}

Listas

Una lista es una colección de elementos del MISMO TIPO

En scala y los lenguajes funciones (racket) las listas son INMUTABLES y RECURSIVAS

val l = List(1,2,3)
val s = 1::2::3::Nil

print(l.head) // 1
print(l.tail) // List(2,3)
print(l.tail.head) // 2
print(l.tail.tail) // List(3)
print(l.tail.tail.head) // 3
print(l.tail.tail.tail) // Nil 

Trabajar con listas y patrones

Las listas se pueden capturar de diferentes formas

lst match {
    case Nil => ..
    case List() => ...
    case h::t => h cabeza, t cola
    case h::t => h match {
        case Nil => ..
        case m::t => Lista
        case m:Int::t => Prim nt
        case t:Int => Entero
        case t:String => ....
        case 1::t => lista con 1 inicial
    }

}