Clasificar eventos de negocio con pattern matching
Reglas de negocio escritas como una tabla de casos: el compilador avisa si falta alguno.
El problema
Llegan eventos distintos —compras, devoluciones, reclamos— y cada uno se trata según sus datos. Con if y else anidados las reglas se vuelven ilegibles y nadie nota la que falta.
sealed trait Evento
case class Compra(cliente: String, monto: BigDecimal) extends Evento
case class Devolucion(cliente: String, monto: BigDecimal, motivo: String) extends Evento
case class Reclamo(cliente: String, texto: String) extends Evento
def clasificar(e: Evento): String = e match {
case Compra(c, m) if m >= 1000 => s"VIP: $c compró $m"
case Compra(c, m) => s"Normal: $c compró $m"
case Devolucion(c, m, "defecto") => s"Calidad: revisar lote, $c devolvió $m"
case Devolucion(c, m, motivo) => s"Devolución de $c ($motivo): $m"
case Reclamo(c, t) if t.contains("legal") => s"URGENTE: $c menciona acción legal"
case Reclamo(c, _) => s"Atención al cliente: $c"
}
@main def demo(): Unit =
List(Compra("Ana", 1500), Devolucion("Luis", 80, "defecto"), Reclamo("Eva", "voy a lo legal"))
.map(clasificar).foreach(println)
Por qué está escrito así
- sealed trait le dice al compilador que esos tres son todos los eventos posibles: si agregás un cuarto y no lo tratás, avisa.
- Cada case desarma el evento y nombra sus partes en el mismo renglón.
- Las condiciones (if m >= 1000) y los valores fijos ("defecto") conviven en la misma tabla.
- El orden importa: gana el primer caso que coincide, por eso lo específico va arriba.
Guardalo como eventos.scala y corré con Scala 3: scala eventos.scala (o scala-cli run eventos.scala).
Buscar la palabra "legal" en un texto libre es una regla frágil: se le escapa "abogado" y salta con "ilegalmente". Sirve como primer filtro, no como decisión.
Adaptalo a tu caso con IA
El botón copia este prompt con el código pegado debajo. Reemplazá los corchetes con lo tuyo y pegalo en ChatGPT, Claude, Gemini o Copilot.
Tengo esta clasificación de eventos con pattern matching en Scala 3. Mis eventos reales son: [EVENTOS Y SUS CAMPOS] y las reglas de negocio son: [REGLAS EN LENGUAJE LLANO]. Reescribila con esos datos, devolviendo un tipo propio (prioridad, área responsable, acción) en vez de texto, y agregá pruebas que cubran cada regla y el caso por defecto.
Ejemplo escrito y revisado a mano.
Comentarios
Todavía no hay comentarios. El primero puede ser el tuyo.
¿Lo adaptaste a algo tuyo?
Contame qué resolviste con esto, o qué le faltó.