Tipos distinct en Odin
Celsius y Fahrenheit comparten memoria pero se niegan a mezclarse — distinct acuna tipos nuevos.
package main
import "core:fmt"
// distinct mints a new type: same layout, no accidental mixing.
Celsius :: distinct f32
Fahrenheit :: distinct f32
to_fahrenheit :: proc(c: Celsius) -> Fahrenheit {
return Fahrenheit(f32(c) * 9.0 / 5.0 + 32.0)
}
main :: proc() {
cabin := Celsius(21.5)
// to_fahrenheit(Fahrenheit(70)) would refuse to compile.
fmt.printfln("cabin: %.1f C = %.1f F", f32(cabin),
f32(to_fahrenheit(cabin)))
}
Cómo funciona
Celsius :: distinct f32es un tipo completo, no un alias.- El conversor toma
Celsiusy devuelveFahrenheit, con los casts escritos. - Pasarle un
Fahrenheites error de compilación, que es justamente el punto.
Palabras clave y builtins usados aquí
distinctf32importpackageprocreturn
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 425
- Tokens
- 80
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 74 segundos.
Paso 1 de 3 en Tipos y genéricos; paso 19 de 27 en Fundamentos del lenguaje.