Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre una de las bases del lenguaje.

Anuncios
Anuncios

Pero que es un crate? Basicamente equivale a las librerias que tenemos en otros lenguajes, es decir sera un contenedor que podemos usar para almacenar otras cosas, una practica extendida entre los desarrolladores es tratar de mantener su codigo lo mas limpio posible y siempre que sepan lo que esta haciendo, esto hace que tiendan a mantener las librerias especializadas, estas especializaciones a su vez dentro del crate se las conoce como modulos.

Anuncios

Vamos a tomar el tipico ejemplo que se utiliza para comentar este tipo de elementos como es un auto, el automovil lo podemos considerar como el crate y este a su vez estara compuesto de los siguientes modulos:

  • Motor
  • Interior
  • Electricidad
  • Combustible
  • Ruedas
Anuncios

Obviamente faltan otras partes pero usemos estas de forma basica, a su vez podemos sub dividir a los modulos de este crate porque por ejemplo en Interior podemos tener:

  • Asientos
  • Ceniceros
  • Audio
Anuncios

Pero a su vez tambien sabemos que varios de estos modulos estan relacionados entre ellos, porque el motor necesita del combustible para funcionar, a su vez este genera electricidad para ser utilizada por la parte de electricidad del auto y a su vez hace girar las ruedas, en fin podemos tener un largo etc de relaciones entre los distintos modulos, esto llevado a niveles de progrmacion puede ser un completo desastre.

Anuncios

Para solucionar esto debemos segmentar cada elemento usando los rangos o scopes, es decir que debemos separar cada parte de la siguiente manera:

  • Coche::Motor
  • Coche::Interior
  • Coche::Electricidad
Anuncios

Y asi sucesivamente, pero para poder acceder desde estos modulos a otros debemos usar la directiva use, les paso uno de ejemplo:

// Dentro de Coche::Motor
use Combustible;
use Electricidad;
Anuncios

Pero esto no termina ahi porque como dijimos a su vez podemos seguir dividiendolo para poder acceder a mas partes del coche, y como vinimos usando hasta ahora podemos usar la directive use y los rangos para poder acceder a ellos:

// Codigo del archivo main
use Coche::Interior::Audio;
use Coche::Interior::Asientos;
Anuncios

Esto nos servira como base para empezar a trabajar con crate, en los proximos posts crearemos uno para ver como trabaja pero antes de terminar veamos como es la sintaxis para crear un create por medio de cargo:

cargo new nombre --lib
Anuncios

Es muy similar al utilizado para crear nuestros ejemplos pero esta vez le agregamos la opcion –lib para indicarle que lo creado no es un programa sino una libreria, a continuacion les muestro como sera la estructura de un crate:

tinchicus@dbn001vrt:~/lenguajes/rust/crater$ tree
.
├── Cargo.toml
└── src
    └── lib.rs

1 directory, 2 files
tinchicus@dbn001vrt:~/lenguajes/rust/crater$
Anuncios

En este caso las principales diferencias seran dos, la primera es que no tenemos un archivo llamado main.rs sino otro con el nombre de lib.rs, a su vez no tenemos un archivo llamado Cargo.lock, esto es debido a que este no ejecuta ningun codigo y al igual que las librerias solo contienen las funciones que podemos usar en nuestro codigo simplemente importandolo, a continuacion veamos las distintas formas de poder definirlas, empecemos con la mas basica:

mod Interior
{
	mod Asientos
	{
		// instrucciones
	}
	
	mod Ceniceros
	{
		// instrucciones
	}
}

mod Electricidad
{

}
Anuncios
Anuncios

Continuando con el ejemplo de Coche, siempre sera la palabra mod y seguido del nombre que lo identifica, en este caso siempre tendremos uno raiz o top, dentro podremos tener otros submodulos para tareas especificas, y en todos los casos siempre se utiliza la palabra mod para crearlo, dentro podremos tener todos los que sean necesarios, tambien podemos hacer submodulos de los submodulos y asi sucesivamente, como dijimos esta es la forma mas basica pero tambien podemos tener estos submodulos en distintos archivos, por ejemplo:

.
├── Cargo.toml
└── src
    └── Interior.rs
    └── Electricidad.rs
    └── lib.rs
Anuncios

Dentro del archivo Interior.rs tendremos el siguiente codigo:

mod Asientos
{
	// instrucciones
}
	
mod Ceniceros
{
	// instrucciones
}
Anuncios

Y dentro del archivo Electricidad.rs el siguiente codigo:

mod Luces
{
	// instrucciones
}
	
mod Tablero
{
	// instrucciones
}
Anuncios

Como pueden ver simplemente pasamos los submodulos que tenemos dentro de cada modulo raiz del primer caso porque el modulo raiz sera el archivo pero este sera definido de la siguiente forma en el archivo lib.rs:

mod Interior;
mod Electricidad;
Anuncios

Esta sera la forma de definir la raiz de cada modulo y el compilador se encargara del resto, por ultimo tenemos la posibilidad de almacenar cada sub modulo en archivos que se encuentran dentro de un directorio, veamos el siguiente ejemplo:

.
├── Cargo.toml
└── src
    ├── Electricidad
    │   ├── Luces.rs
    │   ├── Tablero.rs
    │   └── mod.rs
    ├── Interior
    │   ├── Asientos.rs
    │   ├── Ceniceros.rs
    │   └── mod.rs
    └── lib.rs
Anuncios

Como pueden ver el nombre del directorio es el del modulo raiz, dentro crearemos un archivo con el nombre mod.rs donde definiremos los submodulos, veamos un ejemplo de archivo para Electrcidad:

mod Luces;
mod Tablero;
Anuncios

despues un archivo por cada submodulo,, dentro de cada submodulo agregaremos su codigo, tomemos como ejemplo el archivo Luces.rs y tendra este codigo:

mod Luces
{
	// instrucciones
}
Anuncios

En este caso deben respetar el nombre del archivo con el modulo que estemos definiendo, esto debemos hacerlo con cada archivo para tener todos los submodulos definidos, en el caso de lib.rs es igual al que vimos en el caso anterior, simplemente pasamos a mod seguido del nombre del directorio, todas las formas son validas siempre y cuando nos faciliten la depuracion del codigo ante un error o una conducta inapropiada.

Anuncios

En resumen, hoy hemos visto una introduccion muy basica de crate, a que equivale en otros lenguajes, como nos puede ayudar, como se compone, un ejemplo practico para entender su composicion, como se crean los mismos mediante el comando cargo, para finalmente las distintas formas que disponemos para definir cada uno de los modulos y submodulos, 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

Donación

Es para mantenimento del sitio, gracias!

$1.50