論理演算子 パート3
CoddyのRustジャーニー「Fundamentals」セクションの一部 — レッスン 23/75。
複数の条件をチェックする際、コンピュータは最終的な結果が判明した時点でチェックを中断します(これは短絡評価と呼ばれます)。
例えば:
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2;ここでは x は 0 に等しいため、y / x > 2 は評価されません。もし順序を逆にすると:
let result: bool = y / x > 2 && x != 0;yが0で除算されることになり、これは数学的に許容されないため、エラーが発生します。
この手法は、論理式の評価を最適化するために使用されます。例えば:
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);この例では、a > 0 と c < -5 がどちらも偽(false)であるため、b < 2 と d < 10 は評価されません。
チャレンジ
初心者太陽光パネルのエネルギー発電に適した日かどうかを判断するプログラムを作成しましょう。
これらの変数を初期化してください:
is_sunnyを値 true でwind_speedを値 5.4 でtemperatureを値 23 でsolar_panel_outputを値 9 でis_cloudyを値 false で
以下の条件をすべてチェックする1つの論理式を作成してください:
- 晴れている
- 風速が 10 未満である
- 太陽光パネルの出力が 15 未満である
- 気温が 20 より高い、または雲がない
チートシート
Rustは、複数の条件をチェックする際に短絡評価(ショートサーキット評価)を使用します。最終的な結果が確定した時点で評価を停止します。
&& (AND) の場合、最初の条件が偽(false)であれば、2番目の条件は評価されません:
let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2; // 安全 - y/x は評価されません|| (OR) の場合、最初の条件が真(true)であれば、2番目の条件は評価されません:
let a: i32 = 0;
let b: i32 = 2;
let c: i32 = 3;
let d: i32 = 5;
let result: bool = (a > 0 && b < 2) || (c < -5 && d < 10);
// b < 2 と d < 10 は評価されませんこの最適化により、不要な計算が防止され、ゼロ除算のようなランタイムエラーを回避できます。
自分で試してみよう
fn main() {
// 変数を初期化する
// 完全な論理式
let result: bool =
// 以下の行を削除しないでください
println!("Checking conditions for solar energy production...");
println!("1. Is it sunny? {}", is_sunny);
println!("2. Is wind speed safe? {}", (wind_speed < 10.0));
println!("3. Can panels produce more? {}", (solar_panel_output < 15));
println!("4. Is temperature good OR no clouds? {}", (temperature > 20 || !is_cloudy));
println!("\\nFinal result - Good day for solar energy production: {}", result);
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。