Skip to content

Commit 1b253c6

Browse files
committed
#17 - dart
1 parent 62f7036 commit 1b253c6

File tree

1 file changed

+187
-0
lines changed

1 file changed

+187
-0
lines changed
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
/**
2+
* Demostración de diferentes mecanismos de iteración en Dart
3+
*
4+
* Dart proporciona varios mecanismos de iteración, combinando
5+
* sintaxis familiar con características únicas del lenguaje.
6+
*/
7+
8+
import 'dart:io' show stdout;
9+
10+
void main() {
11+
print('=== Demostración de Mecanismos de Iteración en Dart ===\n');
12+
13+
// 1. Bucle for tradicional
14+
print('1. Usando bucle for tradicional:');
15+
void forLoop() {
16+
for (int i = 1; i <= 10; i++) {
17+
stdout.write('$i ');
18+
}
19+
print(''); // Nueva línea
20+
}
21+
forLoop();
22+
23+
// 2. Bucle while
24+
print('\n2. Usando bucle while:');
25+
void whileLoop() {
26+
int contador = 1;
27+
while (contador <= 10) {
28+
stdout.write('$contador ');
29+
contador++;
30+
}
31+
print('');
32+
}
33+
whileLoop();
34+
35+
// 3. Bucle do-while
36+
print('\n3. Usando bucle do-while:');
37+
void doWhileLoop() {
38+
int num = 1;
39+
do {
40+
stdout.write('$num ');
41+
num++;
42+
} while (num <= 10);
43+
print('');
44+
}
45+
doWhileLoop();
46+
47+
// 4. forEach con List
48+
print('\n4. Usando forEach con List:');
49+
void forEachLoop() {
50+
List<int> numeros = List.generate(10, (index) => index + 1);
51+
numeros.forEach((numero) => stdout.write('$numero '));
52+
print('');
53+
}
54+
forEachLoop();
55+
56+
// 5. for-in loop
57+
print('\n5. Usando for-in loop:');
58+
void forInLoop() {
59+
var numeros = List.generate(10, (index) => index + 1);
60+
for (var numero in numeros) {
61+
stdout.write('$numero ');
62+
}
63+
print('');
64+
}
65+
forInLoop();
66+
67+
// 6. Usando Iterable.generate
68+
print('\n6. Usando Iterable.generate:');
69+
void iterableGenerate() {
70+
var numeros = Iterable.generate(10, (index) => index + 1);
71+
numeros.forEach((numero) => stdout.write('$numero '));
72+
print('');
73+
}
74+
iterableGenerate();
75+
76+
// 7. Usando map
77+
print('\n7. Usando map:');
78+
void mapExample() {
79+
var numeros = List.generate(10, (index) => index + 1);
80+
numeros.map((numero) => stdout.write('$numero ')).toList();
81+
print('');
82+
}
83+
mapExample();
84+
85+
// 8. Usando Iterador personalizado
86+
print('\n8. Usando Iterador personalizado:');
87+
class NumberIterator implements Iterator<int> {
88+
int _current = 0;
89+
90+
@override
91+
int get current => _current;
92+
93+
@override
94+
bool moveNext() {
95+
if (_current < 10) {
96+
_current++;
97+
return true;
98+
}
99+
return false;
100+
}
101+
}
102+
103+
class NumberIterable extends Iterable<int> {
104+
@override
105+
Iterator<int> get iterator => NumberIterator();
106+
}
107+
108+
void customIterator() {
109+
var numbers = NumberIterable();
110+
for (var number in numbers) {
111+
stdout.write('$number ');
112+
}
113+
print('');
114+
}
115+
customIterator();
116+
117+
// 9. Usando async* para generar un stream
118+
print('\n9. Usando async* para generar un stream:');
119+
Stream<int> countStream() async* {
120+
for (int i = 1; i <= 10; i++) {
121+
yield i;
122+
}
123+
}
124+
125+
void streamExample() async {
126+
await for (var number in countStream()) {
127+
stdout.write('$number ');
128+
}
129+
print('');
130+
}
131+
// Nota: Este ejemplo es asíncrono y no se ejecutará en orden
132+
streamExample();
133+
134+
// 10. Usando recursión
135+
print('\n10. Usando recursión:');
136+
void recursion(int n) {
137+
if (n <= 10) {
138+
stdout.write('$n ');
139+
recursion(n + 1);
140+
}
141+
}
142+
recursion(1);
143+
print('');
144+
145+
// EXTRA: Ejemplo con Dart Collection Methods
146+
print('\n11. Bonus: Usando métodos de colección de Dart:');
147+
void dartCollectionMethods() {
148+
var numeros = List.generate(10, (index) => index + 1);
149+
150+
// where para filtrar
151+
print('Números pares:');
152+
numeros.where((n) => n.isEven).forEach((n) => stdout.write('$n '));
153+
print('');
154+
155+
// take para obtener los primeros n elementos
156+
print('Primeros 5 números:');
157+
numeros.take(5).forEach((n) => stdout.write('$n '));
158+
print('');
159+
160+
// skip para saltar elementos
161+
print('Saltando los primeros 5 números:');
162+
numeros.skip(5).forEach((n) => stdout.write('$n '));
163+
print('');
164+
}
165+
dartCollectionMethods();
166+
}
167+
168+
/**
169+
* NOTAS SOBRE LAS CARACTERÍSTICAS ÚNICAS DE DART:
170+
*
171+
* 1. Dart tiene soporte nativo para streams con async* y yield
172+
* 2. Los tipos son obligatorios para las variables públicas
173+
* 3. Las colecciones en Dart son muy potentes y tienen muchos métodos útiles
174+
* 4. Dart tiene un sistema de tipos sound null safety
175+
* 5. La sintaxis para iteración es similar a otros lenguajes, pero con
176+
* algunas peculiaridades propias de Dart
177+
*/
178+
179+
/**
180+
* MEJORES PRÁCTICAS PARA ITERACIÓN EN DART:
181+
*
182+
* 1. Usar for-in cuando sea posible, es más legible
183+
* 2. Aprovechar los métodos de colección como where, map, etc.
184+
* 3. Considerar el uso de streams para datos asíncronos
185+
* 4. Implementar Iterable cuando se necesite una colección personalizada
186+
* 5. Usar final o const cuando sea posible para variables
187+
*/

0 commit comments

Comments
 (0)