@@ -51,14 +51,16 @@ forma más sencilla:
51
51
Si quisiéramos declarar el valor de retorno de una función como una tupla
52
52
podría ser algo así:
53
53
54
- ``` rust,no_run
54
+ ``` rust,no_run,ignore
55
55
fn getCoordinates() -> (i32, i32) {
56
56
(10, 20)
57
57
}
58
58
```
59
59
60
60
## Arrays / Slices / Vectores
61
61
62
+ ### Arrays
63
+
62
64
Go utiliza la misma sintaxis para los tres tipos de datos
63
65
64
66
``` go
@@ -99,6 +101,20 @@ Los arreglos no se pueden redimensionar, tiene un tamaño fijo, podemos modifica
99
101
las posiciones si declaramos el arreglo como mutable, pero no podemos agregar
100
102
nuevos elementos.
101
103
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
+
102
118
Consideramos a los slices como una referencia a un rango de elementos:
103
119
104
120
``` rust
@@ -108,23 +124,52 @@ Consideramos a los slices como una referencia a un rango de elementos:
108
124
#println! (" {slice:?}" )
109
125
```
110
126
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
+
111
132
Además Rust tiene el tipo de dato ` Vec ` , el cual es un tipo de dato dinamico,
112
133
esta colección puede ser modificada agregando nuevos elementos, podemos crear
113
134
` Vec ` de varias formas, pero una de las más convencionales es con la macro
114
135
` vec! ` :
115
136
116
137
``` 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:?}" )
120
141
```
121
142
122
143
Al declarar como mutable podemos utilizar el método ` push ` para agregar
123
144
elementos dentro.
124
145
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
+
125
167
Por 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.
128
173
129
174
### Mapas / Diccionarios / HashMaps
130
175
@@ -153,11 +198,11 @@ En Go hariamos algo como esto:
153
198
Mientras que el mismo ejemplo en Rust seria así:
154
199
155
200
``` 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 );
161
206
162
- println! (" Hay {} manzanas" , mapa . get (" manzana" ). unwrap ());
207
+ println! (" Hay {} manzanas" , mapa . get (" manzana" ). unwrap ());
163
208
```
0 commit comments