typestar

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

  1. Celsius :: distinct f32 es un tipo completo, no un alias.
  2. El conversor toma Celsius y devuelve Fahrenheit, con los casts escritos.
  3. Pasarle un Fahrenheit es error de compilación, que es justamente el punto.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Tipos y genéricos; paso 19 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →