Синтаксическая конструкция if
служит для логической проверки и выполнения блока кода при определённом условии.
В языке Rust в этой конструкции постарались исключить многие потенциальные явные и скрытые ошибки.
fn main() {
if 2 + 2 == 4 {
println!("{}", 4);
}
if 2 + 2 != 5 {
println!("{}", 5);
}
if '2' > '1' {
println!("{}", 2);
}
if true {
println!("{}", true);
}
if false {
println!("{}", false);
}
}
Обратите внимание, что условное выражение не заключается в скобки, а фигурные скобки обязательные. Пожалуйста проверьте эти слова,
написав проверочные программы, в результате работы которые будут получены сообщения об ошибках синтаксиса конструкции if
.
Используя синтаксическую конструкцию if true {}
создайте условия для ошибки - переполнения стека (thread 'main' has overflowed its stack fatal runtime error: stack overflow
). Вариант правильного ответа (не подглядывайте! - напишите свой)
Rust Playground
Условные выражения могут описывать различные условия и быть вложенными. Хороший стиль программирования, а также технические ограничения и здравый смысл - всё это рекомендует делать эти конструкции как можно компактнее и проще.
fn main() {
let n = 0;
// let n = 1;
// let n = 10 * 1000;
// let n = -1;
if n > 5000 {
print!("Это число большое");
} else if n > 0 {
print!("А это числон небольшое");
} else if n < 0 {
print!("А это число отрицательное");
} else {
print!("А это ноль.");
}
}
Существует возможность условной инициализации переменной при помощи конструкции if
. Эта конструкция является сокращенной записью
более длинного выражения. Обратите внимание, что два следующих блока кода эквивалентны:
fn main() {
{
let a;
if 2 + 2 == 4 {
let b = 2 + 2 + 2;
a = b;
} else {
let b = 20 + 20 + 20;
a = b;
}
println!("{}", a);
}
{
let a = if 2 + 2 == 4 {
let b = 2 + 2 + 2;
b
} else {
let b = 20 + 20 + 20;
b
};
println!("{}", a);
}
}
В языке Rust существует цикл с предусловием while
. Благодаря ему можно многократно выполнять содержание блока кода.
fn main() {
let mut j = 0;
while j <= 256 {
print!("{} ", j * j);
j += 1;
}
}
Попробуйте произвести инициализацию переменной с помощью цикла while
. Какой результат у вас получится? Если у вас появятся вопросы
без ответа - это хорошо. На последующих занятиях мы найдем на них ответы.
Пример решения. Rust Playground
Для прекращения работы цикла используется ключевое слово break
. Для перехода на новую итерацию цикла до завершения работы всего блока кода цикла используется continue
.
Пример:
fn main() {
let mut j = 0;
while j < 256 {
let k = j * j;
j += 1;
print!("{} ", k);
if k >= 40000 {
break;
}
}
}
Пример:
fn main() {
let mut j = 0;
while j <= 256 {
j += 1;
if j % 2 == 0 {
continue;
}
print!("{} ", j * j);
}
}
loop
продолжает список языковых конструкций для организации циклов. Можно сказать, что loop
- это сокращенная запись while true
, так как они эквивалентны по принципу своей работы. Приме использования:
fn main() {
let mut j = 0;
loop {
print!("{} ", j * j);
j += 1;
if j == 200 {
break;
} else if j == 255 {
continue;
}
}
}
Цикл for
в Rust имеет свои самобытные особенности. Поэтому не его синтаксе надо остановиться подробнее.
Пример использования:
fn main() {
for i in 1..11 {
print!("{} ", i );
}
}
Обратим внимание на строку for i in 1..11 {
. В ней i
инициализируется непосредственно на месте. Также мы видим конструкцию 1..11
. Это описание числовой последовательности, в которой первый элемент является 1
, а последний это число, которое является
последним. Как только значение цикла дошло до этого последнего числа - цикл прекращает свою работу. Инициируемые переменные внутри цикла, прекращают существование.
fn main() {
let mut j = 0;
for i in 1..11 {
print!("{} ", i );
j = i;
}
println!();
println!("{}", j);
// println!("{}", i);
}
Важной особенностью цикла for
является возможность инициализации отрезка чисел с помощью переменных:
fn main() {
let mut j = 0;
let start = 0;
let limit = 11;
for i in start..limit {
print!("{} ", i);
j = i;
}
println!();
println!("{}", j);
}
Используя изученные типы данных Rust напишите циклы перебора разных типов данных. Останавливайте циклы с помощью логических операций, используйте break
, continue
в своих программах.