Menu
Coddy logo textTech

論理演算子 パート3

CoddyのRustジャーニー「Fundamentals」セクションの一部 — レッスン 23/75。

複数の条件をチェックする際、コンピュータは最終的な結果が判明した時点でチェックを中断します(これは短絡評価と呼ばれます)。

例えば:

let x: i32 = 0;
let y: i32 = 5;
let result: bool = x != 0 && y / x > 2;

ここでは x0 に等しいため、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 > 0c < -5 がどちらも偽(false)であるため、b < 2d < 10 は評価されません。

challenge icon

チャレンジ

初心者

太陽光パネルのエネルギー発電に適した日かどうかを判断するプログラムを作成しましょう。

これらの変数を初期化してください:

  • 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);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Fundamentalsのすべてのレッスン