Vamos entender o que é controle de fluxo.
Em ciência da computação, estrutura de controle (ou fluxo de controle) refere-se à ordem em que instruções, expressões e chamadas de função são executadas ou avaliadas em programas de computador sob programação imperativa ou funcional.
Toda linguagem tem seus controles de fluxo aquele if, else e loop. No Rust não seria diferente, vamos entender nesse post loop, while e for.
Loop
O loop no Rust executa varias vezes um bloco de instruções até que tenha uma condição que diga que pare.
fn main() {
loop {
println!("loop ")
}
}
No caso acima teremos uma repetição infinita pois não informamos ao código qual a hora sair da repetição. Para sair da repetição usando a palavra chave break.
Expressões if e else if
O if permitir ramificar seu código dependente da condição foi proposta. Vamos utilizar-lo para definir a hora de parar o fluxo, aquele loop do exemplo anterior que estava infinito vamos dar uma break caso a variável x seja maior do que 3.
fn main() {
let mut x = 1;
loop {
if x > 3 {
break;
}
println!("x: {}", x);
x += 1;
}
}
/*
x: 1
x: 2
x: 3
*/
Criamos uma variável chamada x que é mutável e comparamos o seu valor igual a 3, se sim usamos o break caso contrario incrementamos um valor até que a mesma chegue a comparação.
Nas condições temos “caso não” que é o else, no exemplo acima informamos só o caso positivo mas não o “negativo”.
Segue o exemplo.
fn main() {
let mut x = 1;
loop {
if x > 3 {
break;
} else {
println!("x: {}", x);
x += 1;
}
}
}
/*
x: 1
x: 2
x: 3
*/
Colocamos o else imprimindo a variável enquanto ela for menor do que 3. Se analisarmos os dois exemplos, podemos chegar a conclusão que o else as vezes não é necessário em alguns blocos de instruções.
Podemos gerar erros caso a instrução de código seja da seguinte forma.
fn main() {
let mut x = 1;
loop {
if x {
break;
} else {
println!("x: {}", x);
x += 1;
}
}
}
/*
--> main.rs:32:12
|
32 | if x {
| ^ expected bool, found integer
|
= note: expected type `bool`
found type `{integer}`
*/
Em algumas linguagens essa instrução funcionaria por conta que estamos comparando se tem algo na variável mas no Rust esse tipo de comparação só pode ser feita quando o tipo for boolean como o próprio error informa “expected bool, found integer”.
Com o else if podemos combinar varias condições tipo, se o x for maior que 1 ou 2 ou 3 e assim vai.
Segue o código abaixo.
fn main() {
let mut x = 1;
loop {
if x > 3 {
break;
} else if x == 1 {
println!("x é igual 1: {}", x);
} else if x == 2 {
println!("x é igual 2: {}", x);
} else {
println!("x caiu no else: {}", x);
}
x += 1;
}
}
/*
x é igual 1: 1
x é igual 2: 2
x caiu no else: 3
*/
No caso acima colocamos uma comparação a cada número retiramos o x +=1 do else e colocamos fora para que não importe qual condição ele passe o mesmo vai seguir incrementando valor.
While
O while lembra o loop a diferença entre eles que um precisa de condição para executar o outro não. Nesse caso o while necessita de condição.
Segue o código abaixo.
fn main() {
let mut valor = 4;
while valor !=0 {
println!("valor: {}", valor);
valor -= 1;
}
}
/*
valor: 4
valor: 3
valor: 2
valor: 1
*/
No caso acima estamos declarando um variável chamada valor com o número e comparamos o mesmo com uma condição, se for diferente de 0 imprimi o valor e decremento um até chegar igual a 0.
For
O for lembra o while a diferença entre eles que o for traz parâmetros que é o index e o valor de forma fácil.
Segue o código abaixo.
fn main() {
for numero in (1..4).rev() {
println!("o numero é: {}!", numero);
}
}
/*
o numero é: 3!
o numero é: 2!
o numero é: 1!
*/
No código acima faz uma contagem regressiva usando o loop for e usamos um método chamado .rev() que reverte a o intervalo dos números para uma ordem decrescente.
Então galera é isso, espero que tenham gostado até a próxima.