Bienvenidos sean a este post, hoy veremos un concepto que podemos usar en los crate.
Hasta ahpra vimos que para importar un crate para nuestro codigo debemos usar la siguiente linea al comienzo del codigo:
extern crate nombre_crate;
Pero el lenguaje nos da la capacidad de poder cambiar el nombre para una mejor referencia de este, por ejemplo:
extern crate nombre_crate as mi_crate;
Esto es similar a como cuando «casteamos» una variable en un tipo porque basicamente le estamos diciendo al lenguaje que haga un cast del nombre del crate al nuevo porque de ahora en adelante en lugar de usarlo de esta forma:
use nombre_crate::modulo::struct;
Pasaremos a usarlo de la siguiente forma:
use mi_crate::modulo::struct;
Otra opcion interesante que hemos estado utilizando pero no hemos mencionado es la distintas formas que poseemos de utilizar a use, por ejemplo si nosotros tomamos el crate que hicimos y estuvimos utilizando como ejemplo al aplicar el siguiente use:
use convlib::longitud::in_a_cm;
Solamente podremos acceder a esa funcion que se encuentra definida dentro del modulo longitud, este tambien se lo denomina como use-me dado que solo podras acceder a esta funcion o modulo pero tambien podemos definir las funciones que queremos acceder:
use convlib::longitud::{in_a_cm, km_a_ml};
Mediante un simple tuple le pasamos las funciones o modulos que queremos acceder excluyendo a las que no pasemos y por ultimo podemos acceder a todas de la siguiente forma:
use convlib::longitud::*;
Se preguntaran porque existe la opcion anterior teniendo esta? La respuesta es sencilla, la memoria. En muchas ocasiones el crate puede tener un monton de funciones o modulos que realmente no necesitamos y esto puede recargar la memoria sin necesidad, en cambio si sabemos cuales necesitaremos las especificamos y sabremos que son las unicas que se cargaran al momento de ejecutar el codigo, esto no es obligatorio pero se lo tomo como una buena practica, especialmente heredada de Java, donde si sabemos que debemos usar no es necesario cargar todo pero si tienen alguna duda con respecto a lo que van a necesitar usen el comodin o asterisco (*) y sabran que tendran acceso a todo.
Otra opcion interesante es poder utilizar el cast como vimos al comienzo pero para un modulo, tomemos el siguiente ejemplo:
use convlib::longitud as medila;
En este caso lo que hacemos es basicamente cambiarle el nombre a longitud por lo tanto para poder usarla de ahora en adelante podemos hacer lo siguiente:
let m = medila::cm_a_in(32.0);
Por ultimo no es necesario utilizar todo completo como vimos hasta ahora sino que podemos pasarlo parcialmente, por ejemplo si nosotros utilizamos este use:
use convlib::longitud;
Para poder acceder a una de las funciones del modulo longitud debemos hacerlo de la siguiente forma:
let m = longitud::km_a_ml(100.0);
Suponiendo que hacemos una reestructuracion dentro del crate y dividimos las funciones para convertir en dos submodulos que se llamaran metrico, donde estaran las funciones que convierten de sistema britanico a metrico, y otro llamado anglosajon, donde estaran las funciones que convierten de sistema metrico a britanico, tomemos el caso anterior y veamos como debemos llamarlo con el nuevo cambio:
let m = longitud::anglosajon::km_a_ml(100.0);
Por lo tanto mientras mas especifico sea al momento de declarar el use menos path deberan usar para acceder pero se nos puede crear otros inconvenientes como superposicion de nombres o reposicion, por lo tanto utilicenlo con sabiduria.
En resumen, hoy hemos visto una pequeña explicacion de algunos conceptos que podemos aplicar a la hora de importar nuestros crate, asi como tambien hemos visto algunas veces que utilizamos a use para poder establecer un namespace y facilitar nuestro acceso tanto a los submodulos como las funciones, 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
