Unidades de Medida
Defina e rastreie unidades para reduzir bugs de análise dimensional.
Unidades de Medida
Sounio tem sintaxe dedicada para unidades de medida, para que programas carreguem significado dimensional pelo sistema de tipos.
Declarações de Unidade
Unidades são declaradas no nível superior e, atualmente, exigem ; no final:
unit kg;
unit g = 0.001 * kg;
unit mg = 0.001 * g;
Unidades podem ser combinadas com multiplicação, divisão e expoentes:
unit m;
unit s;
unit N = kg * m / s^2;
Quantidades (Número + Unidade)
O compilador suporta uma forma de tipo para quantidades:
Quantity[f64, mg]
Quantity[f64, kg*m/s^2]
Para atribuir um tipo de unidade a um literal numérico, use @:
unit kg;
unit g = 0.001 * kg;
unit mg = 0.001 * g;
fn main() {
let dose: Quantity[f64, mg] = 500.0@Quantity[f64, mg]
let half = 250.0@Quantity[f64, mg]
let total = dose + half
}
Especificação vs Implementação
O objetivo de longo prazo é checagem e conversões de unidade em tempo de compilação para evitar incompatibilidades (por exemplo, você não pode somar um comprimento com uma massa).
Hoje, unidades e tipos de quantidade são parseados e representáveis, mas a checagem completa de incompatibilidades pode não ser aplicada em todo modo do compilador ainda. Prefira tratar unidades como uma anotação de correção até o verificador de unidades estar integrado de ponta a ponta.