Skip to content

Commit b20533e

Browse files
authored
Merge pull request mouredev#6434 from eulogioep/main
#17 - java, javascript, php, typescript y dart
2 parents c3e9c35 + 1b253c6 commit b20533e

File tree

5 files changed

+762
-0
lines changed

5 files changed

+762
-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+
*/
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/**
2+
* Clase que demuestra diferentes mecanismos de iteración en Java
3+
*
4+
* En programación, la iteración es el proceso de repetir un bloque de código
5+
* múltiples veces. Java ofrece varios mecanismos para realizar iteraciones,
6+
* cada uno con sus propias características y casos de uso ideales.
7+
*/
8+
public class eulogioep {
9+
public static void main(String[] args) {
10+
System.out.println("Demostración de diferentes mecanismos de iteración en Java\n");
11+
12+
// 1. Bucle for tradicional
13+
System.out.println("1. Usando bucle for tradicional:");
14+
/*
15+
* El bucle for es uno de los más comunes y versátiles.
16+
* Sintaxis: for (inicialización; condición; incremento)
17+
* - inicialización: se ejecuta una vez al principio
18+
* - condición: se evalúa antes de cada iteración
19+
* - incremento: se ejecuta al final de cada iteración
20+
*/
21+
for (int i = 1; i <= 10; i++) {
22+
System.out.print(i + " ");
23+
}
24+
System.out.println("\n");
25+
26+
// 2. Bucle while
27+
System.out.println("2. Usando bucle while:");
28+
/*
29+
* El bucle while se ejecuta mientras una condición sea verdadera.
30+
* Es útil cuando no sabemos exactamente cuántas iteraciones necesitamos.
31+
*/
32+
int contador = 1;
33+
while (contador <= 10) {
34+
System.out.print(contador + " ");
35+
contador++;
36+
}
37+
System.out.println("\n");
38+
39+
// 3. Bucle do-while
40+
System.out.println("3. Usando bucle do-while:");
41+
/*
42+
* Similar al while, pero garantiza que el código se ejecute al menos una vez
43+
* ya que la condición se evalúa al final de cada iteración.
44+
*/
45+
int num = 1;
46+
do {
47+
System.out.print(num + " ");
48+
num++;
49+
} while (num <= 10);
50+
System.out.println("\n");
51+
52+
// EXTRA: Más mecanismos de iteración
53+
54+
// 4. forEach con array
55+
System.out.println("4. Usando forEach con array:");
56+
/*
57+
* El bucle forEach es una forma más moderna y legible de iterar
58+
* sobre colecciones o arrays.
59+
*/
60+
int[] numeros = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
61+
for (int numero : numeros) {
62+
System.out.print(numero + " ");
63+
}
64+
System.out.println("\n");
65+
66+
// 5. Stream forEach
67+
System.out.println("5. Usando Stream forEach:");
68+
/*
69+
* Los Streams, introducidos en Java 8, ofrecen una forma funcional
70+
* de procesar colecciones de datos.
71+
*/
72+
java.util.stream.IntStream.rangeClosed(1, 10)
73+
.forEach(n -> System.out.print(n + " "));
74+
System.out.println("\n");
75+
76+
// 6. Iterator
77+
System.out.println("6. Usando Iterator:");
78+
/*
79+
* Los Iterators son objetos que permiten recorrer una colección
80+
* y eliminar elementos durante la iteración si es necesario.
81+
*/
82+
java.util.List<Integer> lista = new java.util.ArrayList<>();
83+
for (int i = 1; i <= 10; i++) lista.add(i);
84+
85+
java.util.Iterator<Integer> iterator = lista.iterator();
86+
while (iterator.hasNext()) {
87+
System.out.print(iterator.next() + " ");
88+
}
89+
System.out.println("\n");
90+
91+
// 7. Stream iterate
92+
System.out.println("7. Usando Stream.iterate:");
93+
/*
94+
* Otra forma de usar Streams para generar una secuencia infinita
95+
* y limitarla según necesitemos.
96+
*/
97+
java.util.stream.Stream.iterate(1, n -> n + 1)
98+
.limit(10)
99+
.forEach(n -> System.out.print(n + " "));
100+
System.out.println("\n");
101+
}
102+
}

0 commit comments

Comments
 (0)