typestar

Encadenar Options en Scala

Dos búsquedas dependientes y una condición, sin un solo chequeo de null.

val owners: Map[String, String] = Map("orders" -> "ada", "billing" -> "grace")
val inboxes: Map[String, String] = Map("ada" -> "Ada@Example.COM")

// flatMap threads one Option-returning step into the next, and map
// transforms the value inside. Two nested null checks become one line.
def inboxFor(team: String): Option[String] =
  owners.get(team).flatMap(inboxes.get).map(_.toLowerCase)

// filter keeps the value only when the test passes, else gives None.
def companyInbox(team: String): Option[String] =
  inboxFor(team).filter(_.endsWith("@example.com"))

// fold unwraps both cases at once: the default first, then the transform.
def contactLine(team: String): String =
  companyInbox(team).fold("no company contact")(mail => s"write to $mail")

Cómo funciona

  1. owners.get(team).flatMap(inboxes.get) mete una búsqueda directo en la siguiente.
  2. .map(_.toLowerCase) entra dentro del Option, y filter descarta el valor si _.endsWith("@example.com") falla.
  3. fold desenvuelve ambos casos a la vez, tomando el default no company contact antes de transformar.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
15
Caracteres a escribir
747
Tokens
128
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 118 segundos.

Escribe este fragmento

Paso 2 de 3 en Option y Either; paso 20 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →