typestar

Objetos y compañeros en Scala

Un object es un espacio de nombres con una sola instancia; el compañero guarda los constructores.

// A plain object is a namespace: one instance, no constructor.
object Temperature:
  val absoluteZero: Double = -273.15
  def toFahrenheit(celsius: Double): Double = celsius * 9 / 5 + 32

// A companion object shares its name with a class and can reach the
// class's private parts, which makes it the place for constructors.
class Passcode private (val digits: String):
  def masked: String = "*" * digits.length

object Passcode:
  // A smart constructor validates first and may refuse to build.
  def apply(raw: String): Option[Passcode] =
    if raw.length == 6 && raw.forall(_.isDigit) then Some(new Passcode(raw))
    else None

val freezing: Double = Temperature.toFahrenheit(0.0)
val rejected: Option[Passcode] = Passcode("12ab56")
val accepted: Option[String] = Passcode("314159").map(_.masked)

Cómo funciona

  1. object Temperature agrupa absoluteZero y toFahrenheit sin nada que instanciar.
  2. class Passcode private esconde su constructor de todos menos de su objeto compañero.
  3. def apply(raw: String) revisa primero los dígitos y devuelve None antes que construir un valor malo.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
786
Tokens
135
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 108 segundos.

Escribe este fragmento

Paso 3 de 3 en Traits y extensiones; paso 24 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →