#3 Rustで学ぶ演算子の基本
Rustの演算子は、見た目こそ他の言語と似ていますが、「型に厳しい」というRustらしい特徴が色濃く出る部分でもあります。この記事では、Rustの基本的な演算子と、型変換のルールについて解説します。
算術演算子・比較演算子
Rustでも、なじみのある演算子を使います。
+-*/%算術演算子==!=><比較演算子&&||!論理演算子
異なる型同士は計算できない
Rustで初心者がよくつまずくのが、「型が違うと計算できない」という厳格なルールです。例えば整数型(i32)と浮動小数点型(f64)の変数を、そのまま+で足し合わせようとするとエラーになります。
let a: i32 = 5;
let b: f64 = 2.5;
// a + b はエラーになる
計算したい場合は、asというキーワードを使って明示的に型を変換する必要があります。
let result = a as f64 + b;
整数の割り算は切り捨てになる
整数型同士で割り算を行うと、小数点以下は自動的に切り捨てられます。小数の結果が欲しい場合は、あらかじめ浮動小数点型を使う必要があります。
複合代入演算子
「変数に加算してから代入し直す」処理をまとめて書ける複合代入演算子も使えます。
let mut count = 0;
count += 1; // count = count + 1 と同じ
Rustではmutを付けていない変数は再代入できないため、複合代入演算子もmut付きの変数にのみ使えます。
Rustならではの注意点
他の言語では自動で行われる型変換(暗黙の型変換)を、Rustはほとんど許していません。これは、意図しない計算ミスをコンパイルの段階で防ぐための設計です。「なぜエラーになるのか分からない」と感じたら、まず計算しようとしている変数同士の型が一致しているかを確認しましょう。整数のオーバーフロー(表現できる範囲を超えること)も、デバッグビルドでは実行時エラーとして検出されるため、他の言語より厳格に安全性が保たれています。
参照とデリファレンスの演算子
Rustにも、C++と同じく変数のアドレスを扱う&と、参照先の値を取り出す*があります。
let age = 20;
let r = &age;
println!("{}", *r); // 参照先の値(20)
ただしRustでは、所有権という仕組みによって、参照が指す先が不正な状態になることがコンパイル時に防がれるため、C++のポインタよりも安全に扱えます。
まとめ
Rustの演算子自体は他の言語と似ていますが、「異なる型は計算できない」という厳格さが最大の特徴です。asによる明示的な変換や、安全性が保証された参照演算子(&・*)も理解しておくと、Rustのエラーメッセージにも落ち着いて対処できるようになります。
本ページはプロモーションを含みます。
参考書籍(PR)
Rustをもっと学びたい方には「実践Rust入門[言語仕様から開発手法まで]」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿