Перейти к основному содержанию

test

<p>Условные выражения это очень интересная тема. С ними вы сможете создавать более сложные программы обладающие вариативностью.</p>
<p>Общий смысл условных выражений в том, что вы проверяете некое условие. В зависимости от его соблюдения, производите действие. Например, вы собираетесь выйти на улицу и проверяете: если снаружи начинается дождь, то берете зонтик, иначе не берете.</p>
<p>В Rust есть следующие типы условных выражений:</p>
<ul>
    <li><pre-c>if</pre-c> (если), <pre-c>if else</pre-c> (если и иначе) &ndash; проверка условия.</p>
    </li>
    <li><pre-c>match</pre-c> (совпадение) &ndash; сопоставление с образцом.</li>
    <li><pre-c>if let</pre-c> - сравнение с шаблоном.</li>
</ul>

<h2>Условное выражение if</h2>
<p>Здесь проверяется некое условие, и если оно истинное, то выполняется блок кода. Если не истинное, то пропускается и программа идет дальше. Например:</p>
<pre><code class="language-rust">fn main() {
    if 4 == 10/2 {
        println!{"Четыре равно пяти!"};
    }
    if 365/7 &gt; 24 {
        println!(&quot;Недель в году больше, чем часов в сутках&quot;);
    }
}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Недель в году больше, чем часов в сутках
</pre-rslt>
<p>Первое условие ложно, поэтому код в скобках не был исполнен, а второе истинно и текст вывелся в консоль.</p>
<p>Общий синтаксис условного выражения if:</p>
<pre><code class="language-rust">if condition {
    executable code;
}</code></pre>

<h2>Расширенное условное выражение if..else</h2>
<p>Если условие соблюдается, то выполняется один блок кода, а если не соблюдается, то другой.</p>
<pre><code class="language-rust">fn main() {
    let learn_language: &str = "Rust"; // Изучаемый нами язык программирования

    if learn_language == "Rust" {
        println!("Мы изучаем Rust language.");
    } else {
        println!("Мы изучаем {}.", learn_language);
    }
}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Мы изучаем Rust language.
</pre-rslt>
<p>Попробуйте дать переменной другое значение.</p>
<p>Кстати, конструкции <pre-c>if..else</pre-c> могут быть вложены друг в друга.</p>

<p>Общий синтаксис проверки условия с блоком кода при несоблюдении условия:</p>
<pre><code class="language-rust">fn main() {
    if condition {
        executable code;
    } else if condition {
        executable code;
    } else {
        executable code;
    }
}</code></pre>
<p>Вот более сложная версия предыдущего примера кода:</p>
<pre><code class="language-rust">fn main() {
    let learn_language: &str = "Rust"; // Изучаемый нами язык программирования

    if learn_language == "Rust" {
        println!("Мы изучаем язык программирования Раст.");
    } else if learn_language == "Python" {
        println!("Мы изучаем язык программирования Питон.");
    } else {
        println!("Мы изучаем {}.", learn_language);
    }
}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Мы изучаем язык программирования Раст.
</pre-rslt>

<p>В этом примере мы сначала проверяем не является ли изучаемый нами язык Rust, если это не так, то проверяем не Python ли это, а если не Rust и не Python, то тогда уже просто подставляем значение проверяемой переменной в строку как есть.</p>
<p>Однако, для решения этой задачи существует более подходящее условное выражение &ndash; match.</p>

<h2>Условное выражение match</h2>
<p>При использовании <pre-c>match</pre-c> мы берем какую-либо переменную и перечисляем возможные варианты её значения. Затем Rust сопоставляет их и, как только совпадение с одним из вариантов найдено, программа выполняет код справа от знака <pre-c>=&gt;</pre-c>. Также мы можем указать как обработать ситуацию, когда ни один из вариантов не совпал со значением переменной. Для этого используется знак подчеркивания <pre-c>_</pre-c>.</p>
<pre><code class="language-rust">fn main() {
    let learn_language: &str  = "Rust"; // Изучаемый нами язык программирования

    match learn_language {
        "Rust" => println!("Мы изучаем язык программирования Раст."),
        "Python" => println!("Мы изучаем язык программирования Питон."),
        _ => println!("Мы изучаем {}.", learn_language)
    }
 
}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Мы изучаем язык программирования Раст.
</pre-rslt>

<p>Если бы переменной <pre-c>learn_language</pre-c> мы присвоили какое-либо иное значение, например Java, то программа вывела-бы нам: Мы изучаем Java. Попробуйте в своей среде разработки.</p>

<p>Общий синтаксис match:</p>
<pre><code class="language-rust">match match_value {
    value1 => {executable code;},
    value2 => {executable code;},
    …
    _ => {executable code;},    // default value
}</code></pre>

<h3>Присвоение переменной результата match</h3>
<p>Есть возможность значение, полученное при сопоставлении с образцом, присвоить некой переменной. Что может быть очень удобно и сделает код яснее.</p>
<pre><code class="language-rust">fn main() {
    let learn_language: &str = "Rust"; // Изучаемый нами язык программирования

    let learn_lang_mod: &str = match learn_language {
        "Rust"   => "Раст",
        "Python" => "Питон",
        _ => learn_language
    };
 
    println!("Мы изучаем язык программирования {}.", learn_lang_mod);
}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Мы изучаем язык программирования Раст.
</pre-rslt>
<p>В этой программе мы создали переменную в которую записываем модифицированное значение изучаемого нами языка, чтобы распечатать в конце. Если этого языка нет в нашем списке, то мы выкрутимся из ситуации отдавая переменной неизменное значение.</p>

 

<code class="language-rust">fn main() {
    let learn_language: &str = "Rust"; // Изучаемый нами язык программирования

    let learn_lang_mod: &str = match learn_language {
        "Rust"   => "Раст",
        "Python" => "Питон",
        _ => learn_language
    };
 
    println!("Мы изучаем язык программирования {}.", learn_lang_mod);
}</code>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Мы изучаем язык программирования Раст.
</pre-rslt>

 

 

<p>Общий синтаксис присвоения переменной результата сопоставления match:</p>
<pre><code class="language-rust">let result_variable = match match_value {
    value1 => {executable code;},
    value2 => {executable code;},
    …
    _ => {executable code;},    // default value
};
</code></pre>

<h2>Сравнение по шаблону if let</h2>
<p>Конструкция <pre-c>if let</pre-c> стоит особняком от <pre-c>if</pre-c> и <pre-c>match</pre-c>.</p>
<div class="footnote">
    Здесь для объяснения приводится ещё не изученный нами тип данных (кортеж), поэтому главу можно пропустить и вернуться к ней позднее.
</div>
<p>Давайте предварительно посмотрим пример в котором мы проверяем две переменные на совпадение:</p>
<pre><code class="language-rust">fn main() {
    let course = ("Rust", "beginner","course");
    let course1 = ("Rust", "beginner", "curriculum");
    if course1 == course {
        println!("Значения совпали.");
    }
    else {
        println!("Значения не совпали.");
    }
}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Значения не совпали.
</pre-rslt>

<p>Конструкция if let по сути делает то же самое, но позволяет проверять частичное совпадение с шаблоном:</p>
<pre><code class="language-rust">fn main() {
    let course = ("Rust", "beginner","course");

    if let ("Rust", "beginner", cur) = course {
        println!("Проверяемые значения совпали с шаблоном.");
    }
    else {
        println!("Совпадений не обнаружено.");
    }

}</code></pre>
<pre-rslt-ok>Результат:</pre-rslt-ok>
<pre-rslt>Проверяемые значения совпали с шаблоном.
</pre-rslt>

<p>Здесь мы проверили на соответствие первого и второго значения в кортеже, но мы также можем что-нибудь сделать и с третьим значением, которое попадает в переменную <pre-c>cur</pre-c>. Вы вольны называть эту переменную как захотите. Доработайте эту программу, чтобы значение переменной <pre-c>cur</pre-c> вывелось в консоль.</p>
<p>Общий синтаксис if let:</p>
<pre><code class="language-rust">if let (value1, value2) = match_variable {
    executable code;
} else {
    executable code;
}
</code></pre>

<p>Также мы можем проверять на соответствие другому шаблону. Например, использовать сопоставление для выборки курсов для начинающих: <pre-c>(lang, &quot;beginner&quot;, c)</pre-c>.</p>
 

Для просмотра заданий и решений, а также публикации своих решений необходимо зарегистрироваться на сайте.

Всё бесплатно, мы просто хотим с вами познакомиться и понять насколько актуально то, что мы делаем.

© Клют И. А., 2022. Копирование контента возможно только с письменного разрешения автора.