Control de flujo de ejecución
Las dos estructuras más importantes para el control del flujo de ejecución son los lazos y la expresión if:
Expresiones if/else[edit]
Muy similar a otros lenguajes, se evalúa si es falso o verdadero una expresión. En este caso se evalúa si una variable es menor a 10 o no:
fn main() {
let a = 5;
if a < 10 {
println!("la expresión es verdadera");
}else {
println!("la exprexión es false");
}
}
La expresión a evaluar debe ser de tipo bool, de lo contrario producirá un error 308. Sobre comparaciones entre variables, se puede ver acá
El else es opcional, y se pueden colocar varias expresiones if/else en cascada:
fn main() {
let a = 5;
if a == 10 {
println!("la variable es 10");
}else if a == 4 {
println!("la variable es 4");
}else if a == 7 {
println!("la variable es 7");
}else {
println!("la variable no es ni 10, 4 ni 7");
}
}
Si debes poner muchos if/else en cascada, lo mejor sería usar un #Match.
Usando en let[edit]
Como el if es una expresión, se puede utilizar en el lado derecho de un let:
fn main() {
let a = 5;
let b = 7;
let c = if a>b {3} else {1};
println!("El valor es {}",c);
}
Al ejecutar este programa, la salida sería "1".
Lazos con loop[edit]
El comando loop causa que un bloque de código se repita infinitas veces a menos de que explícitamente se le ordene que termine. Este código nunca terminará:
fn main() {
loop {
println!("hola");
}
}
La única forma de que deje de imprimir "hola" es usando Control-C.
Saliendo de un lazo con break[edit]
Con break la iteración termina y se sale del lazo.
fn main() {
let mut a=0;
loop {
a=a+1;
println!("{}",a);
if a == 100 {break;}
}
}
En este programa, al llegar la impresión a 100, terminará el programa.
Devolviendo un valor[edit]
loop ejecuta una expresión varias veces y se puede utilizar el break para devolver un valor, por ejemplo en una asignación:
fn main() {
let mut a =0;
let b= loop {
a=a+1;
if a == 100 {
break a;
}
};
println!("{}",b);
}
Lazos condicionales con while[edit]
Una forma de tener un lazo con un condicional es usar while. El programa anterior modificado sería:
fn main() {
let mut a =0;
while a != 100 {
a=a+1;
}
println!("{}",a);
}
Lazos con for[edit]
Hay varias formas de usar for para crear un lazo con un iterador.
Iterador con ..[edit]
Con un iterador a..b, los valores van desde a inclusive hasta b (excluyendolo):
fn main() {
for a in 1..10 {
println!("{}",a);
}
}
En este ejemplo, se imprimirán los valores desde 1 hasta 9. En este caso la variable a no necesita ser declarada explícitamente antes.
Si quisiéramos que el iterador fuera desde a hasta b inclusive, podemos poner un = antes de la segunda variable:
fn main() {
for a in 1..=10 {
println!("{}",a);
}
}
Iteradores[edit]
Hay varios iteradores: into_iter, iter y iter_mut.
iter[edit]
Toma cada elemento de la colección para cada iteración.
fn main() {
let a = [0,1,2];
for x in a.iter() {
println!("{}",x);
}
}
En este ejemplo, se imprime los números 0,1,2.
iter_iter[edit]
Toma cada elemento de la colección y lo saca de la misma. Al final del for, la colección estará vacía.
iter_mut[edit]
Toma cada elemento, permitiendo su modificación.
Match[edit]
Match permite encontrar patrones, que se pueden usar como un switch en el lenguaje C:
fn main() {
let a=5;
match a {
1 => println!("uno"),
2 | 3 | 5 | 7 => println!("es un número primo"),
_ => println! ("cualquier otro número"),
}
}
Cada opción está separada por una coma, y se usa | para considerar varias opciones a la vez.