← Rust EspañolChapter 05 of 13

Control de Flujo

## Objetivos de Aprendizaje - Dominar las sentencias condicionales (if-else) - Trabajar con bucles (loop, while, for) - Usar expresiones match - Comprender la coincidencia de patrones ## Expresiones if-else ### if Basico ```rust fn main() { let x = 5; if x > 0 { println!("x is positive"); } } ``` ### if-else ```rust fn main() { let x = -5; if x > 0 { println!("x is positive"); } else { println!("x is not positive"); } } ``` ### if-else if-else ```rust fn main() { let x = 0; if x > 0 { println!("positive"); } else if x < 0 { println!("negative"); } else { println!("zero"); } } ``` ### if como Expresion ```rust fn main() { let x = 5; let sign = if x > 0 { "positive" } else { "non-positive" }; println!("{}", sign); // positive // Con multiples else if let grade = if x >= 90 { "A" } else if x >= 80 { "B" } else if x >= 70 { "C" } else { "F" }; } ``` ### Operadores de Comparacion ```rust // == Igual // != No igual // > Mayor que // < Menor que // >= Mayor o igual que // <= Menor o igual que ``` ### Operadores Logicos ```rust // && Y logico // || O logico // ! No logico fn main() { let x = 5; let y = 10; if x > 0 && y > 0 { println!("Both positive"); } if x > 0 || y > 0 { println!("At least one is positive"); } if !(x == 0) { println!("x is not zero"); } } ``` ## Expresiones de Bucle ### loop (Bucle Infinito) ```rust fn main() { let mut counter = 0; let result = loop { counter += 1; if counter == 10 { break counter * 2; // Devolver valor del loop } }; println!("Result: {}", result); // 20 } ``` ### Bucle while ```rust fn main() { let mut number = 3; while number != 0 { println!("{}", number); number -= 1; } println!("LIFTOFF!!!"); } ``` ### Bucle for ```rust fn main() { // Iterar sobre rango for i in 0..5 { println!("{}", i); // 0, 1, 2, 3, 4 } // Rango inclusivo for i in 0..=5 { println!("{}", i); // 0, 1, 2, 3, 4, 5 } // Iterar sobre arreglo let arr = [10, 20, 30]; for element in arr { println!("{}", element); } // Con indice let arr = [10, 20, 30]; for i in 0..arr.len() { println!("{}: {}", i, arr[i]); } } ``` ### for con Rango y paso ```rust fn main() { // Rango for i in 1..=5 { println!("{}", i); } // Rev (inverso) for i in (1..=5).rev() { println!("{}", i); // 5, 4, 3, 2, 1 } // Paso de 2 for i in (0..=10).step_by(2) { println!("{}", i); // 0, 2, 4, 6, 8, 10 } } ``` ### Etiquetas de Bucle ```rust fn main() { 'outer: for i in 1..=3 { 'inner: for j in 1..=3 { if j == 2 { continue; // Saltar j = 2 } if i == 2 && j == 1 { break 'outer; // Romper bucle exterior } println!("{} {}", i, j); } } } ``` ## Expresiones match ### match Basico ```rust fn main() { let x = 1; match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"), _ => println!("anything else"), } } ``` ### match con Multiples Brazos ```rust fn main() { let x = 2; match x { 1 | 2 | 3 => println!("one, two, or three"), 4..=6 => println!("four, five, or six"), _ => println!("something else"), } } ``` ### match con Rangos ```rust fn main() { let score = 85; let grade = match score { 90..=100 => "A", 80..=89 => "B", 70..=79 => "C", 60..=69 => "D", _ => "F", }; println!("Grade: {}", grade); } ``` ### match con Patron let ```rust fn main() { let msg = Some("hello"); match msg { Some(text) => println!("{}", text), None => println!("No message"), } // Equivalente con if let if let Some(text) = msg { println!("{}", text); } } ``` ### match con if guard ```rust fn main() { let x = Some(5); match x { Some(n) if n > 0 => println!("positive: {}", n), Some(n) if n == 0 => println!("zero"), Some(n) => println!("negative: {}", n), None => println!("none"), } } ``` ### match con Desestructuracion ```rust fn main() { let point = (3, 5); match point { (0, 0) => println!("origin"), (x, 0) => println!("on x-axis: {}", x), (0, y) => println!("on y-axis: {}", y), (x, y) => println!("({}, {})", x, y), } } ``` ### match con Enum ```rust enum Color { Red, Green, Blue, RGB(u8, u8, u8), } fn main() { let color = Color::RGB(255, 0, 0); match color { Color::Red => println!("Red"), Color::Green => println!("Green"), Color::Blue => println!("Blue"), Color::RGB(r, g, b) => println!("RGB({}, {}, {})", r, g, b), } } ``` ## Expresiones if let ### if let Basico ```rust fn main() { let msg = Some(42); if let Some(n) = msg { println!("Number is {}", n); } else { println!("No number"); } } ``` ### if let con else ```rust fn main() { let msg: Option = None; if let Some(n) = msg { println!("Number is {}", n); } else { println!("No number provided"); } } ``` ### if let con enum ```rust enum Message { Quit, Move { x: i32, y: i32 }, Write(String), } fn main() { let msg = Message::Move { x: 10, y: 20 }; if let Message::Move { x, y } = msg { println!("Move to ({}, {})", x, y); } } ``` ## Expresiones while let ```rust fn main() { let mut stack = vec![1, 2, 3]; while let Some(top) = stack.pop() { println!("Popped: {}", top); } } ``` ## Combinando Patrones ```rust fn main() { let result: Result = Ok(42); match result { Ok(n) if n > 0 => println!("positive: {}", n), Ok(n) => println!("zero or negative: {}", n), Err(e) => println!("Error: {}", e), } } ``` ## Resumen - if-else para ejecucion condicional - if puede usarse como expresion (devuelve valor) - loop crea bucle infinito, break puede devolver valor - bucle while con condicion - bucle for sobre rangos, iteradores, colecciones - Etiquetas de bucle para romper bucles anidados - match es coincidencia de patrones exhaustiva - Rangos: `a..b` (exclusivo), `a..=b` (inclusivo) - `|` combina patrones en brazo de match - if let y while let para coincidencia de patron unico

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →