算術

// 著作権 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 では、これは定義されています。

i32i16 に変更して、整数オーバーフローを確認してみてください。これ は、デバッグビルドではパニックし(チェックあり)、リリースビルドでは 値が折り返します。ほかにも、overflowing、saturating、carrying といった 選択肢があります。これらはメソッド構文で利用でき、たとえば (a * b).saturating_add(b * c).saturating_add(c * a) のように書けます。

実際、コンパイラは定数式のオーバーフローを検出します。そのため、 この例では別個の関数が必要になります。