English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Условные операторы Rust

Условные предложения в языке Rust имеют следующий формат:

fn main() {
    let number = 3; 
    if number < 5 { 
        println!("Условие true"); 
    } 
        println!("Условие false"); 
    } 
}

В указанном выше примере есть условное предложение if, эта грамматика очень распространена во многих других языках, но есть и некоторые различия: во-первых, условное выражение number < 5 не требует включения в скобки (обратите внимание, это не запрещено, а не обязательно); но в Rust условное предложение if не существует правила, согласно которому можно не использовать фигурные скобки для одного предложения, и не разрешается использовать одно предложение вместо блока. Несмотря на это, Rust поддерживает традиционную грамматику else-if:

fn main() { 
    let a = 12; 
    let b; 
    if a > 0 { 
        b = 1; 
    }  
    else if a < 0 { 
        b = -1; 
    }  
    else { 
        b = 0; 
    } 
    println!("b равен {}", b); 
}

Результат выполнения:

b равен 1

Условные выражения в Rust должны быть типа bool, например, следующий пример является неправильным:

fn main() { 
    let number = 3; 
    if number { // ошибка, expected `bool`, found integer rustc(E0308)
        println!("Yes");
    } 
}

Хотя в языках C/C++ условные выражения представляются целыми числами, 0 или true, этот принцип запрещен во многих языках, которые注重 безопасность кода.

联想之前章节学习的 expressions bodies:

if <condition> { block 1 } else { block 2 }

в такой грамматике: { block 1 } и { block 2 } Можно ли это сделать с выражением bodies?

Ответ положителен! То есть, в Rust мы можем использовать структуру if-else для реализации подобия三元 условному оператору (A ? B : C) эффект:

fn main() { 
    let a = 3; 
    let number = if a > 0 { 1 } else { -1 }; 
    println!("number равен {}", number); 
}

Результат выполнения:

number равен 1

ВниманиеТипы двух выражений bodies должны быть одинаковыми! И должен быть один else с выражением блока.