Rustのbool型と論理演算を完全解説!条件分岐と一緒に基礎から理解しよう
生徒
「Rustのbool型って、他の言語と何が違うんですか?trueとfalseを使うだけですよね?」
先生
「Rustのbool型はシンプルですが、条件分岐や論理演算と組み合わせることで、安全で読みやすいプログラムが書けるようになります。基本がとても大切です。」
生徒
「if文の条件に書くのがbool型なんですよね?」
先生
「その通りです。Rustでは条件式は必ずbool型になります。曖昧な書き方ができない分、バグを防ぎやすいのが特徴です。順番に見ていきましょう。」
1. Rustのbool型とは何か
Rustのbool型は、真か偽かという二つの状態だけを表すデータ型です。値はtrueまたはfalseのどちらかになります。Rustは静的型付け言語のため、bool型として宣言された変数には、必ず真偽値だけが入ります。この制約によって、条件分岐の判定が明確になり、意図しない動作を防ぎやすくなります。
初心者の方は、bool型は「判断の結果を入れる箱」と考えると理解しやすいでしょう。条件が成立しているか、していないか、その結果を安全に扱うための型がbool型です。
2. bool型の基本的な宣言と使い方
Rustでは変数をletで宣言し、bool型の値を代入します。型注釈を書かなくても、代入される値から自動的にbool型だと推論されます。この型推論もRustの特徴です。
fn main() {
let is_rust_fun = true;
let is_difficult = false;
println!("{}", is_rust_fun);
println!("{}", is_difficult);
}
このように、bool型は特別な書き方を必要とせず、直感的に使えます。プログラムの状態を表すフラグとして使われることが多く、「ログインしているか」「処理が完了したか」といった判定に向いています。
3. 条件分岐とbool型の関係
Rustのif文では、条件式に必ずbool型が必要です。他の言語のように数値をそのまま条件として使うことはできません。このルールにより、条件の意味が明確になり、読み手にも優しいコードになります。
fn main() {
let age = 20;
let is_adult = age >= 18;
if is_adult {
println!("成人です");
} else {
println!("未成年です");
}
}
比較演算の結果はbool型になります。その結果を変数に入れ、条件分岐で使うことで、処理の意図がはっきりします。初心者の方は、条件を直接if文に書くよりも、一度bool型の変数に代入する書き方を意識すると理解が深まります。
4. 論理演算子の基本
Rustには三つの代表的な論理演算子があります。論理積、論理和、否定です。これらは複数のbool型の値を組み合わせて、新しい判定を作るために使います。
論理演算を使うことで、「かつ」「または」「ではない」といった条件を正確に表現できます。条件分岐が複雑になり始めたときに、論理演算子の理解が重要になります。
5. 論理積と論理和を使った条件分岐
論理積は、すべての条件が真のときに真になります。論理和は、どれか一つでも真であれば真になります。これらを使うことで、複数条件を組み合わせた分岐が可能になります。
fn main() {
let has_ticket = true;
let has_id = true;
if has_ticket && has_id {
println!("入場できます");
} else {
println!("入場できません");
}
}
この例では、チケットと身分証の両方を持っている場合のみ入場できる、という現実的な条件を表しています。bool型と論理演算を使うことで、現実のルールをそのままコードに落とし込めます。
6. 否定演算子による判定の反転
否定演算子は、bool型の値を反転させます。真は偽に、偽は真になります。条件分岐では、「そうでない場合」を簡潔に表現できるため、非常によく使われます。
fn main() {
let is_logged_in = false;
if !is_logged_in {
println!("ログインしてください");
}
}
否定を使うことで、条件を読みやすく保つことができます。無理に複雑な条件を書かず、bool型の意味が自然に伝わる名前を付けることが重要です。
7. bool型と関数の戻り値
Rustでは関数の戻り値としてbool型を使うこともよくあります。判定処理を関数として切り出すことで、コード全体の見通しが良くなります。条件分岐と組み合わせることで、再利用しやすい構造になります。
fn is_even(number: i32) -> bool {
number % 2 == 0
}
fn main() {
let value = 4;
if is_even(value) {
println!("偶数です");
} else {
println!("奇数です");
}
}
このように、bool型は条件分岐の中心となる存在です。Rustの基本構文を理解するうえで、bool型と論理演算の考え方は避けて通れません。