DEV Community

Héctor David Leiva Gamboa
Héctor David Leiva Gamboa

Posted on

Día 6/365. Control de flujo: if, else, y expresiones.

En esta ocasión, aprendí a realizar if y else, y cuál es la diferencia entre una expresión y una declaración.

Primero, ¿cómo es la estructura básica de un if y un else?

if condicion {
} else {
}
Enter fullscreen mode Exit fullscreen mode

En la parte que dice condicion, hay que realizar cualquier tipo de comparación o pasar un booleano. Ahora bien, en lenguajes como C++ había que poner paréntesis () para hacer la comparación, pero en Rust no hace falta. Es algo que extraño, pero hay que acostumbrarse. El uso de un condicional es muy intuitivo, ya que se utilizan los mismos comparadores de siempre.

Además, estudié una cosa más: las expresiones y la diferencia con una declaración. Cuando declaras una variable, lo haces directamente, por ejemplo: x = 1. Pero en Rust (no sé si en otros lenguajes también), una variable puede tener un valor asignado como resultado de una comparación:

let y = if x == 1 { true } else { false };
Enter fullscreen mode Exit fullscreen mode

Esto puede ser útil, aunque en otros lenguajes que no tienen esta funcionalidad se puede hacer con una función, lo cual consume más espacio. Este enfoque, en cambio, es más compacto.

Ahora bien, esta parte fue un poco complicada, ya que tuve algunos errores al hacerlo, pero el compilador me ayudó a resolverlos. Se trata de las funciones. Como todavía no sé mucho sobre ellas, se me complicó un poco. Aquí dejo dos ejemplos y sus diferencias:

fn main() {
   let x = true;
   println!("{} Rust", mensaje(x));
}

fn mensaje(comparacion: bool) -> &'static str {
   if comparacion {
      "Hola"
   } else {
      "Adiós"
   }
}
Enter fullscreen mode Exit fullscreen mode

Esta es solo una función que devuelve un string (-> &'static str) y que recibe como entrada una variable. Esto es muy importante, ya que depende de la entrada de la variable. En este caso, la terminal nos devuelve: Hola Rust.

Ahora, con el siguiente ejemplo, que tomó un poco más de tiempo hacerlo:

fn main() {
   println!("{} Rust", mensaje(&false));
}

fn mensaje(comparacion: &bool) -> &'static str {
   if *comparacion {
      "Hola"
   } else {
      "Adiós"
   }
}
Enter fullscreen mode Exit fullscreen mode

La principal diferencia es que la entrada es directamente un parámetro por referencia y no una variable. Por esta razón, Rust nos obliga a no duplicar este parámetro. ¿Por qué duplicar un parámetro si podemos usarlo en el mismo espacio en la memoria RAM? Por esto, debemos usar tanto los & como el *. El & evita duplicar el valor en un espacio de memoria, mientras que el * permite acceder al valor almacenado en la RAM.

Top comments (0)