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
object TemperatureagrupaabsoluteZeroytoFahrenheitsin nada que instanciar.class Passcode privateesconde su constructor de todos menos de su objeto compañero.def apply(raw: String)revisa primero los dígitos y devuelveNoneantes que construir un valor malo.
Palabras clave y builtins usados aquí
classdefelseifnewobjectprivatethenval
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.
Paso 3 de 3 en Traits y extensiones; paso 24 de 27 en Fundamentos del lenguaje.