test
<p>Условные выражения это очень интересная тема. С ними вы сможете создавать более сложные программы обладающие вариативностью.</p>
<p>Общий смысл условных выражений в том, что вы проверяете некое условие. В зависимости от его соблюдения, производите действие. Например, вы собираетесь выйти на улицу и проверяете: если снаружи начинается дождь, то берете зонтик, иначе не берете.</p>
<p>В Rust есть следующие типы условных выражений:</p>
<ul>
<li><pre-c>if</pre-c> (если), <pre-c>if else</pre-c> (если и иначе) – проверка условия.</p>
</li>
<li><pre-c>match</pre-c> (совпадение) – сопоставление с образцом.</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 > 24 {
println!("Недель в году больше, чем часов в сутках");
}
}</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>Однако, для решения этой задачи существует более подходящее условное выражение – match.</p>
<h2>Условное выражение match</h2>
<p>При использовании <pre-c>match</pre-c> мы берем какую-либо переменную и перечисляем возможные варианты её значения. Затем Rust сопоставляет их и, как только совпадение с одним из вариантов найдено, программа выполняет код справа от знака <pre-c>=></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, "beginner", c)</pre-c>.</p>
Для просмотра заданий и решений, а также публикации своих решений необходимо зарегистрироваться на сайте.
Всё бесплатно, мы просто хотим с вами познакомиться и понять насколько актуально то, что мы делаем.