Skip to content

Commit 03b9f31

Browse files
committed
feat: add content about shadowing
1 parent cbe0f51 commit 03b9f31

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

assets/css/app.css

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,16 @@ ul > li::marker {
100100

101101
/* Personalización de listas ordenadas */
102102
ol > li::marker {
103-
content: none; /* Usa el comportamiento predeterminado del navegador */
104-
color: var(--dark-yellow); /* Color de los números */
103+
color: var(--yellow); /* Color de los números */
105104
font-weight: bold; /* Hace los números más prominentes */
106105
}
107106

107+
ol {
108+
list-style: initial;
109+
list-style-type: decimal;
110+
@apply list-decimal;
111+
}
112+
108113
/* Estilos para listas anidadas */
109114
ul ul,
110115
ol ol,
@@ -115,7 +120,7 @@ ol ul {
115120

116121
ul ul > li::marker {
117122
content: "◦ "; /* Cambia el marcador de listas desordenadas anidadas */
118-
color: var(--stroke-color);
123+
color: var(--yellow);
119124
}
120125

121126
ol ol > li::marker {

content/9.shadowing.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
nextPath: "bool-and-float"
3+
previousPath: "constants"
4+
expectedResponse: "El valor final es: 15\n"
5+
initialCode: |
6+
fn main() {
7+
// Crea la variable valor con el string "10"
8+
9+
// Asigna el parseo a un entero usando shadowing a la variable valor
10+
11+
valor.parse::<i32>().expect("No es un número");
12+
13+
// Suma 5 al valor
14+
15+
// Muestra el resultado
16+
println!("El valor final es: {valor}");
17+
}
18+
order: 9
19+
---
20+
21+
# Shadowing
22+
23+
En Rust, cuando declaramos una variable con `let`, su nombre queda asociado a un valor en memoria.
24+
El **shadowing** ocurre cuando volvemos a declarar una variable con el mismo nombre que otra anterior, usando nuevamente `let`. Esto *sombrea* (shadow) la variable anterior, es decir, la nueva declaración la reemplaza en el alcance actual.
25+
26+
Lo importante es que, a diferencia de hacer la variable `mut`, el shadowing nos permite:
27+
28+
* **Cambiar el valor** asociado a la variable.
29+
* **Cambiar el tipo** de la variable.
30+
31+
Ejemplo:
32+
33+
```rust
34+
fn main() {
35+
let x = 5; // x es un número entero
36+
let x = x + 1; // x ahora vale 6
37+
let x = "texto"; // x ahora es un string, diferente tipo
38+
println!("{x}");
39+
}
40+
```
41+
42+
En este caso, la variable `x` cambia tanto de valor como de tipo, algo que no sería posible con `mut`. Esto lo hace muy útil para transformar datos paso a paso sin necesidad de inventar nuevos nombres de variables.
43+
44+
---
45+
46+
### 📝 Ejercicio
47+
48+
Crea un programa que:
49+
50+
1. Defina una variable llamada `valor` con el número `10`.
51+
2. Use **shadowing** para:
52+
* Parsear `valor` a un entero.
53+
* Para esto usaremos el método `parse::<i32>()` que convierte un string a un entero de 32 bits.
54+
* Como `parse` puede fallar, usaremos `expect("No es un número")` para manejar el caso de error.
55+
3. Luego **suma** `5` al valor.
56+
4. Imprime el resultado final.
57+

0 commit comments

Comments
 (0)