Aritimética
fn interproduct(a: i32, b: i32, c: i32) -> i32 { return a * b + b * c + c * a; } fn main() { println!("result: {}", interproduct(120, 100, 248)); }
Esta é a primeira vez que vemos uma função diferente de main
, mas o significado deve ser claro: ela recebe trĂȘs inteiros e retorna um inteiro. FunçÔes serĂŁo abordadas com mais detalhes posteriormente.
AritmĂ©tica Ă© muito semelhante a outras linguagens, com precedĂȘncia semelhante.
E quanto ao estouro de inteiros? Em C e C++, o estouro de inteiros com sinal é realmente indefinido, e pode executar coisas desconhecidas em tempo de execução. Em Rust, isto é definido.
Altere os i32
para i16
para ver um estouro de inteiro, que causa um pùnico (verificado) em uma compilação de debug e um wrap-around em uma compilação de release. Existem outras opçÔes, como overflowing, saturação e carrying. Estes são acessados com sintaxe de método, por exemplo, (a * b).saturating_add(b * c).saturating_add(c * a)
.
Na verdade, o compilador detectarå o estouro de expressÔes constantes, é por isso que o exemplo requer uma função separada.