Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre el punto y coma (;).

Anuncios

En el post anterior vimos que en algunas circunstancias debemos usar el punto y coma (;) y en otros casos no es necesario, para ello debemos decir que en Rust casi todo se considera como una expresion y esto hace que devuelva un valor, pero existe una excepcion que es el caso de let dado que al igual que en otros casos el punto y coma es obligatorio al momento de declarar una variable.

Anuncios
Anuncios

Como dijimos casi todo es una expresion para el lenguaje, sin embargo el punto y coma tiene una doble funcion a la hora de definir una expresion dado que si nos encontramos en el final del bloque y lo informamos es para decirle que no debe devolver ese valor y desecharlo y si no lo informamos le estamos diciendo que debe devolverlo y asignarlo a la variable que lo contenga, por esta razon en algunos ejemplos anteriores cuando trabajabamos con Ok al usarlo no poniamos punto y coma para que sea devuelto al final de funcion, para entender el concepto vamos a realizar un ejemplo.

Anuncios

En este caso crearemos un nuevo proyecto que llamaremos ejemplo01, una vez creado modificaremos el codigo generado en main.rs con el siguiente codigo:

main.rs

fn main() {
	let x = 5u32;

	let y =
	{
		let x_cuadrado = x * x;
		let x_cubo = x_cuadrado * x;
		x_cubo + x_cuadrado + x
	};

	let z =
	{
		2 * x;
	};

	println!("x es {:?}", x);
	println!("y es {:?}", y);
	println!("z es {:?}", z);
}
Anuncios

Este es un codigo simple pero con algunas particularidades que analizaremos una por una, primero crearemos una variable llamada x que sera de tipo int unsigned de 32 bits y su valor inicial sera de 5, luego crearemos una nueva variable llamada y pero que esta vez usaremos un bloque para que almacene varios valores, analicemos por separado:

	let y =
	{
		let x_cuadrado = x * x;
		let x_cubo = x_cuadrado * x;
		x_cubo + x_cuadrado + x
	};
Anuncios
Anuncios

Primero creamos una variale llamada x_cuadrado donde guardaremos el valor la variable anterior (x) multiplicado entre si para hacer el cuadrado de este, luego tenemos la definicion de otra variable llamada x_cubo, el cual toma el valor de la variable anterior y la multiplica con x para obtener el valor al cubo de x, lo ultimo que hacemos en este bloque es la suma de las dos variables anteriores y el valor de x, si se percataron las primeras dos variables dentro de este bloque terminaron con punto y coma (;) pero el ultimo no, esto es lo que habiamos comentado anteriormente, al tener punto y coma dentro de este bloque hace la tarea que debe hacer (definir una nueva variable) y luego desecha la devolucion del valor pero al final tenemos una operacion de la suma de todos los valores antes creados pero sin el punto y coma, esto le dice al lenguaje que este resultado debe devolverlo y asignarlo a la variable que posee este bloque, tal como mencionamos anteriormente, lo siguiente es la definicio de una variable z para la cual tambien utilizamos un bloque para almacenar el valor de x por dos pero observen que lo terminamos con un punto y coma, ya veremos que sucede con esto pero deberia suceder lo que comentamos antes.

Anuncios

Por ultimo mostramos los valores de las tres variables, si lo compilamos nos dara una notificacion de que una variable no tiene ningun valor pero si lo ejecutamos veremos la siguiente salida:

x es 5
y es 155
z es ()
Anuncios

Debido al punto y coma la variable z no posee ningun valor, este es el error que tenemos al compilarlo, si quitamos el punto y coma en la variable z y lo recompilamos y ejecutamos veremos la siguiente salida:

tinchicus@dbn001vrt:~/lenguajes/rust/recursion$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/recursion`
x es 5
y es 155
z es 10
tinchicus@dbn001vrt:~/lenguajes/rust/recursion$
Anuncios

Asi que recuerden, si nosotros estamos definiendo una variable al igual que el cierre de algunos bloques el punto y coma sera obligatorio, en cambio si nosotros estamos en un bloque el punto y coma representa al codigo si el resultado de esa expresion debe ser devuelto o no, por esta razon en el post anterior no lo usamos para la recursion de la funcion, e inclusive para la funcion main asi como cuando utilizamos el Ok en posts anteriores.

Anuncios

En resumen, hoy hemos visto un par de particularidades sobre el punto y coma, porque en ocasiones es obligatorio, como cambia su conducta si se encuentra dentro de un bloque y un ejemplo simple para poder verlo en accion, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50