@@ -51,14 +51,16 @@ forma más sencilla:
5151Si quisiéramos declarar el valor de retorno de una función como una tupla
5252podría ser algo así:
5353
54- ``` rust,no_run
54+ ``` rust,no_run,ignore
5555fn getCoordinates() -> (i32, i32) {
5656 (10, 20)
5757}
5858```
5959
6060## Arrays / Slices / Vectores
6161
62+ ### Arrays
63+
6264Go utiliza la misma sintaxis para los tres tipos de datos
6365
6466``` go
@@ -99,6 +101,20 @@ Los arreglos no se pueden redimensionar, tiene un tamaño fijo, podemos modifica
99101las posiciones si declaramos el arreglo como mutable, pero no podemos agregar
100102nuevos elementos.
101103
104+ El que tengan un tamaño fijo ayuda a que Rust nos diga si estamos accediendo a
105+ una posición del arreglo inexistente, es decir si estamos saliendo del rango
106+ de elementos que están dentro del arreglo:
107+
108+ ``` rust
109+ let arr = [7 , 5 , 4 ];
110+
111+ arr [99 ];
112+ ```
113+
114+ Este error sera encontrado en tiempo de compilación.
115+
116+ ### Slices
117+
102118Consideramos a los slices como una referencia a un rango de elementos:
103119
104120``` rust
@@ -108,23 +124,52 @@ Consideramos a los slices como una referencia a un rango de elementos:
108124 #println! (" {slice:?}" )
109125```
110126
127+ Al igual que los array convencionales, si intentamos pasar un rango invalido
128+ obtendremos un error en tiempo de compilación.
129+
130+ ### Vectores
131+
111132Además Rust tiene el tipo de dato ` Vec ` , el cual es un tipo de dato dinamico,
112133esta colección puede ser modificada agregando nuevos elementos, podemos crear
113134` Vec ` de varias formas, pero una de las más convencionales es con la macro
114135` vec! ` :
115136
116137``` rust
117- let mut v = vec! [1 , 2 , 3 ];
118- v . push (4 );
119- #println! (" {v:?}" )
138+ let mut v = vec! [1 , 2 , 3 ];
139+ v . push (4 );
140+ #println! (" {v:?}" )
120141```
121142
122143Al declarar como mutable podemos utilizar el método ` push ` para agregar
123144elementos dentro.
124145
146+ Sin embargo al ser dinamico Rust no puede calcular en tiempo de compilación que
147+ valores serán cargados en memoría durante la ejecución, es por eso que este
148+ código:
149+
150+ ``` rust
151+ let mut v = vec! [1 , 2 , 3 ];
152+ v [99 ];
153+ ```
154+
155+ Deberá fallar en tiempo de ejecución, Rust para solucionar nos da el método
156+ ` get ` que es lo que deberemos de usar para obtener valores dentro de un arreglo.
157+
158+ ``` rust
159+ let mut v = vec! [1 , 2 , 3 ];
160+ v . get (99 );
161+ #println! (" {:?}" , v . get (99 ));
162+ ```
163+
164+ El método ` get ` nos devolverá un ` Option<T> ` profundizaremos sobre este tipo
165+ en el siguiente capitulo.
166+
125167Por otro lado hay que aclarar que tanto los array, como los slices y los ` Vec ` ,
126- son tipos de datos que solo almacenan un único tipo de dato dentro, para
127- utilizar más de un tipo de dato posiblemente deberíamos de utilizar una tupla.
168+ son tipos de datos que solo almacenan un único tipo de dato dentro, como pueden
169+ ver en los ejemplos, entonces solo podemos almacenar o i32, Strings, flotantes,
170+ o lo que necesitemos, pero unicamente elementos que sean de ese tipo de dato,
171+ para utilizar más de un tipo de dato posiblemente deberíamos de utilizar una
172+ tupla o usar otro tipo de dato.
128173
129174### Mapas / Diccionarios / HashMaps
130175
@@ -153,11 +198,11 @@ En Go hariamos algo como esto:
153198Mientras que el mismo ejemplo en Rust seria así:
154199
155200``` rust
156- #use std :: collections :: HashMap ;
157- #
158- let mut mapa = HashMap :: new ();
159- mapa . insert (" manzana" , 3 );
160- mapa . insert (" naranja" , 5 );
201+ #use std :: collections :: HashMap ;
202+ #
203+ let mut mapa = HashMap :: new ();
204+ mapa . insert (" manzana" , 3 );
205+ mapa . insert (" naranja" , 5 );
161206
162- println! (" Hay {} manzanas" , mapa . get (" manzana" ). unwrap ());
207+ println! (" Hay {} manzanas" , mapa . get (" manzana" ). unwrap ());
163208```
0 commit comments