Voltar ao código Scala

Clasificar eventos de negocio con pattern matching

Reglas de negocio escritas como una tabla de casos: el compilador avisa si falta alguno.

Este post ainda não está no seu idioma; você o vê em espanhol. O código é o mesmo.

O 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.

Scala
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 que está escrito assim

  1. 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.
  2. Cada case desarma el evento y nombra sus partes en el mismo renglón.
  3. Las condiciones (if m >= 1000) y los valores fijos ("defecto") conviven en la misma tabla.
  4. El orden importa: gana el primer caso que coincide, por eso lo específico va arriba.
Como testar

Guardalo como eventos.scala y corré con Scala 3: scala eventos.scala (o scala-cli run eventos.scala).

Atenção

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.

Adapte ao seu caso com IA

O botão copia este prompt com o código colado abaixo. Substitua os colchetes pelo que é seu e cole no ChatGPT, Claude, Gemini ou Copilot.

O prompt
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.

Exemplo escrito e revisado à mão.

Compartilhar

Comentários

Ainda não há comentários. O primeiro pode ser o seu.

Apenas texto, sem links. Não pedimos e-mail. Os comentários são revisados antes de serem publicados.

Adaptou para algo seu?

Me conte o que resolveu com isto, ou o que faltou.

Continue testando

Mais código

Ver todos
Darinel Ortega Online · respondo ao longo do dia
Hoje
Olá. Aqui eu não vendo nada: isto é para trocar conhecimento sobre tecnologia.
Escreva o que quiser — pode mandar texto, imagens ou documentos. As mensagens chegam ao meu console e eu respondo por lá.
Você está escrevendo fora do horário. Eu leio assim que o dia começar.

Conversa aberta para compartilhar conhecimento. As mensagens chegam ao meu console e eu respondo por lá.

Vamos marcar uma conversa

Escolha o dia e a hora que funcionem para você. Trinta minutos, sem discurso comercial.

Videochamada

Para uma videochamada, peça por aqui que eu te mando o link da sessão.