算術
// 著作権 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 fn interproduct(a: i32, b: i32, c: i32) -> i32 { return a * b + b * c + c * a; } fn main() { println!("result: {}", interproduct(120, 100, 248)); }
これは、main 以外の関数を初めて見る場面ですが、その意味は明らかなはず です。3 つの整数を受け取り、整数を返します。関数については、後でさらに 詳しく扱います。
算術は、優先順位も含めて、他の言語と非常によく似ています。
では、整数オーバーフローはどうでしょうか。C および C++ では、符号付き 整数のオーバーフローは実際には未定義であり、実行時に何が起こるか わかりません。Rust では、これは定義されています。
i32 を i16 に変更して、整数オーバーフローを確認してみてください。これ は、デバッグビルドではパニックし(チェックあり)、リリースビルドでは 値が折り返します。ほかにも、overflowing、saturating、carrying といった 選択肢があります。これらはメソッド構文で利用でき、たとえば (a * b).saturating_add(b * c).saturating_add(c * a) のように書けます。
実際、コンパイラは定数式のオーバーフローを検出します。そのため、 この例では別個の関数が必要になります。