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:
Newtons
no 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
f64
em um valor do tipoNewtons
acessando 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.