Structs de Tuplas
Se os nomes dos campos não forem importantes, você pode usar uma struct de tupla:
struct Point(i32, i32);
fn main() {
let p = Point(17, 23);
println!("({}, {})", p.0, p.1);
}
Isso é comumente utilizado para wrappers (invólucros) com campo único (chamados newtypes):
struct PoundsOfForce(f64);
struct Newtons(f64);
fn compute_thruster_force() -> PoundsOfForce {
todo!("Pergunte para um cientista de foguetes da NASA")
}
fn set_thruster_force(force: Newtons) {
// ...
}
fn main() {
let force = compute_thruster_force();
set_thruster_force(force);
}
This slide should take about 10 minutes.
- Newtypes são uma ótima maneira de codificar informações adicionais sobre o valor em um tipo primitivo, por exemplo:
- O número é medido em algumas unidades:
Newtonsno exemplo acima. - O valor passou por alguma validação quando foi criado, então não é preciso validá-lo novamente a cada uso:
PhoneNumber(String)ouOddNumber(u32).
- O número é medido em algumas unidades:
- Demonstre como somar um valor
f64em um valor do tipoNewtonsacessando o campo único no newtype.- Geralmente, Rust não gosta de coisas implícitas, como unwrapping automático ou, por exemplo, usar booleanos como inteiros.
- Sobrecarga de operadores é discutido no Dia 3 (genéricos).
- O examplo é uma referência sutil a falha do Orbitador Climático de Marte.