Skip to content

Commit e10f0e9

Browse files
committed
feat(content): add basic range
1 parent 7c6d366 commit e10f0e9

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

content/2.basic/28.range.md

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
---
2+
title: 'Rangos'
3+
description: 'Explorando los Rangos en Rust: Uso en Slices, Vectores, Iteraciones y Más'
4+
draft: true
5+
data:
6+
type: 'custom'
7+
topicLevel: 'start'
8+
position:
9+
x: -50
10+
y: 600
11+
# width: 320
12+
externalLinks:
13+
- name: 'Libro Oficial - Match Binding'
14+
english: false
15+
link: 'https://book.rustlang-es.org/ch18-03-pattern-syntax#-bindings'
16+
- name: 'Libro de Referencia Rust'
17+
english: true
18+
link: 'https://doc.rust-lang.org/reference/expressions/range-expr.html'
19+
- name: 'Documentacion Oficial sobre los Rangos'
20+
english: true
21+
link: 'https://doc.rust-lang.org/std/ops/struct.Range.html'
22+
---
23+
## Rangos en Rust
24+
25+
En Rust, los rangos son una característica poderosa y versátil que facilita la manipulación de secuencias y colecciones de datos. Los rangos pueden ser utilizados en diversas situaciones, incluyendo slices, vectores, iteraciones, validaciones, y más. Este blog post ofrece una exploración detallada de los rangos en Rust, mostrando ejemplos prácticos y destacando su utilidad en diferentes contextos.
26+
27+
> [!IMPORTANT]
28+
> Los rangos son una característica mas que un Tipo.
29+
30+
### Concepto Básico de Rangos en Rust
31+
32+
Un rango en Rust se define utilizando la sintaxis `start..end` o `start..=end`, donde `start` es el valor inicial del rango y `end` es el valor final. La diferencia clave entre estas dos sintaxis es que `..` excluye el valor final, mientras que `..=` lo incluye.
33+
34+
#### Ejemplo:
35+
36+
```rust
37+
fn main() {
38+
let rango_exclusivo = 0..5; // 0, 1, 2, 3, 4
39+
let rango_inclusivo = 0..=5; // 0, 1, 2, 3, 4, 5
40+
41+
println!("Rango exclusivo: {:?}", rango_exclusivo);
42+
println!("Rango inclusivo: {:?}", rango_inclusivo);
43+
}
44+
```
45+
46+
### Uso de Rangos en Slices
47+
48+
Los rangos son particularmente útiles cuando se trabaja con slices de arreglos. Permiten seleccionar una subsección de un arreglo de manera simple y eficiente.
49+
50+
#### Ejemplo:
51+
52+
```rust
53+
fn main() {
54+
let arreglo = [1, 2, 3, 4, 5];
55+
let slice = &arreglo[1..4]; // Selecciona los elementos en las posiciones 1, 2 y 3
56+
57+
println!("Slice: {:?}", slice); // Output: [2, 3, 4]
58+
}
59+
```
60+
61+
### Rangos en Vectores
62+
63+
De manera similar a los slices, los rangos también pueden ser utilizados para obtener subvecotres de un vector. Esto es útil cuando se necesita manipular o acceder a una parte específica del vector.
64+
65+
#### Ejemplo:
66+
67+
```rust
68+
fn main() {
69+
let vector = vec![10, 20, 30, 40, 50];
70+
let subvector = &vector[2..]; // Selecciona los elementos desde la posición 2 hasta el final
71+
72+
println!("Subvector: {:?}", subvector); // Output: [30, 40, 50]
73+
}
74+
```
75+
76+
### Iteraciones con Rangos
77+
78+
Los rangos son frecuentemente utilizados para iterar sobre secuencias de números. Esto es muy útil en bucles `for`, donde se necesita ejecutar un bloque de código un número específico de veces.
79+
80+
#### Ejemplo:
81+
82+
```rust
83+
fn main() {
84+
for i in 0..5 {
85+
println!("Número: {}", i); // Output: 0, 1, 2, 3, 4
86+
}
87+
88+
for j in 0..=5 {
89+
println!("Número: {}", j); // Output: 0, 1, 2, 3, 4, 5
90+
}
91+
}
92+
```
93+
94+
### Validaciones con Rangos
95+
96+
Los rangos también se pueden utilizar para realizar validaciones, como verificar si un valor está dentro de un rango específico.
97+
98+
#### Ejemplo:
99+
100+
```rust
101+
fn main() {
102+
let edad = 25;
103+
if (18..=30).contains(&edad) {
104+
println!("La edad está dentro del rango permitido.");
105+
} else {
106+
println!("La edad está fuera del rango permitido.");
107+
}
108+
}
109+
```
110+
111+
### Otras Situaciones Donde los Rangos Pueden Destacar
112+
113+
1. **Generación de Números:** Los rangos pueden ser utilizados para generar secuencias de números fácilmente.
114+
2. **Operaciones en Colecciones:** Facilitan la selección y manipulación de subconjuntos de datos en colecciones.
115+
3. **Particionamiento de Datos:** Permiten dividir datos en partes más pequeñas de manera eficiente.
116+
117+
### Gráficos: Visualizando Rangos
118+
119+
#### Representación de Rangos en Slices
120+
121+
```plaintext
122+
Arreglo: [1, 2, 3, 4, 5]
123+
Slice (1..4): [2, 3, 4]
124+
125+
+---+---+---+---+---+
126+
| 1 | 2 | 3 | 4 | 5 |
127+
+---+---+---+---+---+
128+
^ ^ ^ ^
129+
| | | |
130+
|---|---|---|
131+
```
132+
133+
### Conclusión
134+
135+
Los rangos en Rust son una herramienta versátil que facilita la manipulación y acceso a secuencias de datos. Desde slices y vectores hasta iteraciones y validaciones, los rangos ofrecen una manera simple y eficiente de trabajar con subconjuntos de datos. Al comprender y aprovechar las capacidades de los rangos, los desarrolladores pueden escribir código más limpio, eficiente y expresivo en Rust.

0 commit comments

Comments
 (0)