Anuncios

Bienvenidos sean a este post, hoy veremos un concepto que podemos usar en los crate.

Anuncios

Hasta ahpra vimos que para importar un crate para nuestro codigo debemos usar la siguiente linea al comienzo del codigo:

extern crate nombre_crate;
Anuncios

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;
Anuncios

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;
Anuncios

Pasaremos a usarlo de la siguiente forma:

use mi_crate::modulo::struct;
Anuncios

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;
Anuncios

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};
Anuncios

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::*;
Anuncios
Anuncios

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.

Anuncios

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;
Anuncios

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);
Anuncios

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;
Anuncios

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);
Anuncios
Anuncios

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);
Anuncios

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.

Anuncios

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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50