Bienvenidos sean a este post, hoy hablaremos sobre una funcion que ya mencionamos anteriormente.
Esta funcion la mencionamos en este post para poder dar formato a una variable de tipo string, esta es parte del modulo fmt de la libreria std (std::fmt), esta es muy similar a lo visto en el post anterior a cuando formateabamos la salida de println, un ejemplo basico de uso de format es el siguiente:
format!("{} {}", 2, 10);
Este trabaja de la misma forma que println donde ubicara ambos datos en las llaves correspondientes pero tambien podemos usarlo de esta manera:
format!("{} {1} {} {0}", "Hola", "Mundo");
Este trabaja de forma similar a cuando vimos como ubicar las variables en las distintas llaves con println, pero en este caso observen que dejamos algunas en blanco, en esos casos ubicara la primera variable o literal (en este caso) que encuentre y en los otros casos utilizara al que le informamos, si lo probaramos la salida sera la siguiente:
Hola Mundo Mundo Hola
Pero tambien podemos usar parametros con nombre para identificarlos, algo similar a cuando trabajamos con Map en Java, veamos un ejemplo:
format!("{a} {b} {} {t}", a = "Hola", b = "Mundo", t = 22);
En este caso en lugar de pasar la posicion pasamos el nombre al cual asignamos el valor, esto es una relacion llamada clave-valor donde el valor estara asociado a esa clave/nombre, observen que dejamos uno en blanco, en este caso tomara la conducta de los casos anteriores, su salida sera la siguiente:
Hola Mundo Hola 22
Como pueden ver en este caso utilizo los datos que solicitamos y en el caso que dejamos en blanco tomo el primer valor que encontro.
Una cosa que no vimos hasta ahora es como formatear nuestra salida porque una opcion muy interesante es que nos permite no solamente la forma de mostrar el dato sino tambien que tipo de base de salida sera, por ejemplo si nosotros hicieramos esto:
format!("{:.3}", 3.1415927);
Para establecer el formato siempre lo iniciaremos con los dos puntos (:) seguido de lo que necesitamos, en este al ponerle .3 le estamos diciendo que limite a tres digitos el valor despues del punto decimal, en nuestra region es coma decimal pero los del norte lo complican todo 😂, con esto si lo probamos tenemos que obtener una salida semejante a esta:
3.142
Pero no solamente podemos formatear la cantidad de decimales sino que tambien podemos hacer con la base de los numeros que vamos a mostrar, como mencionamos anteriormente y otras opciones mas, para ello vamos a ver la siguiente tabla:
Formato string | Rasgo | Descripcion |
{} | Display | Es la forma mas basica de mostrar informacion pero no es soportado por todos |
{:?} | Debug | Es una representacion interna y es soportado por casi todos |
{:b} | Binario | Convierte el numero en binario |
{:o} | Octal | Convierte el numero en octal |
{:x} | Hexadecimal | Lo convierte a hexadecimal en minusculas |
{:X} | Hexadecimal | Lo convierte a hexadecimal en mayusculas |
{:e} | Exponencial | Muestra el numero con exponencial en minusculas |
{:E} | Exponencial | Muestra el numero con exponencial en mayusculas |
{:p} | Apuntador | Nos muestra la ubicacion en memoria del apuntador |
Pero tambien disponemos de otros parametros para formatearlos, veamos la siguiente tabla:
Accion | Parametros | Descripcion |
Fill/Alignment | < | ^ | > | Se usa para alinear y rellenar con caracteres extras |
Flags | Signo | # | 0 | El primero es para indicar que muestre el signo + o no, la segunda es para mostrar los indicadores de conversion anteriores de una forma alternativa, el ultimo es para rellenar con ceros la cantidad que sea necesaria |
width | :valor$ | Esta relacionado con el primero y se usa para establecer el ancho de lo que debemos mostrar y en caso de no alcanzar utiliza el fill |
precision | .N | .N$ | .* | El primero es el caso que vimos de ejemplo donde N sera la precision que usaremos, la siguiente es similar al anterior pero para los casos de usize y el ultimo se utiliza para cuando tenemos dos entradas de formato |
Para entenderlo vamos a crear un ejemplo y veremos estos parametros en accion, para ello crearemos un proyecto que llamaremos formato, una vez creado modificaremos el codigo de main.rs con el siguiente codigo:
main.rs
fn main() {
let v1 = format!("{:.3}", 3.1415927);
let v2 = format!("{:b}", 55);
let v3 = format!("{:+}!", 5);
let v4 = format!("{:x}", 95);
let v5 = format!("{:#x}", 95);
println!("{}", v1);
println!("{}", v2);
println!("{}", v3);
println!("{}", v4);
println!("{}", v5);
}
En este codigo vamos a tener cinco variables, donde utilizaremos varios parametros para formatearlos:
- v1, en este caso utilizamos al .N para reducir los digitos decimales a 3
- v2, utilizamos a b para convertir el valor en binario
- v3, aqui sumamos a signo para mostrar el signo positivo
- v4, aqui convertiremos el valor en hexadecimal
- v5, en este haremos lo mismo al anterior pero implementamos a numeral para cambiar la salida
Lo siguiente son lineas simplemente para mostrar cada uno de los valores formateados en cada variable, compilemos y veamos su salida:
tinchicus@dbn001vrt:~/lenguajes/rust/formato$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running `target/debug/formato`
3.142
110111
+5!
5f
0x5f
tinchicus@dbn001vrt:~/lenguajes/rust/formato$
Observen como se formatearon cada una de nuestras salidas, como se convirtieron los valores en binario y en hexadecimal asi como cambio la salida del hexadecimal por medio del numeral, por ultimo estas mismas opciones las podemos para las llaves que tenemos en la macro println.
En resumen, hoy hemos visto a format, que es, para que nos sirve, como se usa, las opciones que disponemos, los parametros que podemos utilizar, como nos ayudan y por ultimo un breve ejemplo para verlo en accion, espero les haya sido util 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.


Donación
Es para mantenimento del sitio, gracias!
$1.50
