Control de Flujo
## Objetivos de Aprendizaje
- Dominar sentencias if-else
- Trabajar con sentencias switch
- Usar bucles efectivamente
- Manejar control de bucles con break y continue
## Sentencias If-Else
### If Basico
```dart
void main() {
int score = 85;
if (score >= 90) {
print('A');
}
}
```
### If-Else
```dart
void main() {
int score = 85;
if (score >= 90) {
print('A');
} else {
print('B o menos');
}
}
```
### Cadena If-Else-If
```dart
void main() {
int score = 85;
if (score >= 90) {
print('A');
} else if (score >= 80) {
print('B');
} else if (score >= 70) {
print('C');
} else {
print('F');
}
}
```
### Operador Ternario
```dart
void main() {
int score = 85;
String grade = score >= 60 ? 'Aprobado' : 'Reprobado';
print(grade); // Aprobado
}
```
### If Anidado
```dart
void main() {
int age = 25;
bool hasLicense = true;
if (age >= 18) {
if (hasLicense) {
print('Puede conducir');
} else {
print('Necesita licencia');
}
} else {
print('Muy joven para conducir');
}
}
```
## Sentencias Switch
### Switch Basico
```dart
void main() {
String grade = 'B';
switch (grade) {
case 'A':
print('Excelente');
break;
case 'B':
print('Bueno');
break;
case 'C':
print('Regular');
break;
default:
print('Calificacion invalida');
}
}
```
### Switch con Multiples Casos
```dart
void main() {
String fruit = 'apple';
switch (fruit) {
case 'apple':
case 'orange':
case 'banana':
print('Fruta comun');
break;
case 'mango':
case 'pineapple':
print('Fruta tropical');
break;
default:
print('Fruta desconocida');
}
}
```
### Expresion Switch (Dart 3)
```dart
void main() {
String grade = 'B';
String result = switch (grade) {
'A' => 'Excelente',
'B' => 'Bueno',
'C' => 'Regular',
_ => 'Calificacion invalida',
};
print(result); // Bueno
}
```
### Switch con Patrones (Dart 3)
```dart
void main() {
dynamic value = 42;
switch (value) {
case int n when n > 0:
print('Entero positivo: $n');
break;
case int n when n < 0:
print('Entero negativo: $n');
break;
case String s:
print('Cadena: $s');
break;
default:
print('Otro');
}
}
```
## Bucles While
### While Basico
```dart
void main() {
int count = 1;
while (count <= 5) {
print('Contador: $count');
count++;
}
}
```
### Bucle Do-While
```dart
void main() {
int count = 1;
do {
print('Contador: $count');
count++;
} while (count <= 5);
}
```
### While vs Do-While
```dart
void main() {
// While: condicion verificada primero
int a = 10;
while (a < 5) {
print('while: a = $a'); // Nunca se ejecuta
a++;
}
// Do-while: el cuerpo se ejecuta al menos una vez
int b = 10;
do {
print('do-while: b = $b'); // Se ejecuta una vez
b++;
} while (b < 5);
}
```
## Bucles For
### For Tradicional
```dart
void main() {
for (int i = 1; i <= 5; i++) {
print('Iteracion: $i');
}
}
```
### For-In
```dart
void main() {
var items = ['apple', 'banana', 'orange'];
for (var item in items) {
print(item);
}
}
```
### For-Each con Indice
```dart
void main() {
var items = ['apple', 'banana', 'orange'];
for (var i = 0; i < items.length; i++) {
print('$i: ${items[i]}');
}
// Usando forEach
items.asMap().forEach((index, value) {
print('$index: $value');
});
}
```
## Control de Bucles
### Break
```dart
void main() {
for (int i = 1; i <= 10; i++) {
if (i == 5) {
break; // Sale del bucle completamente
}
print(i); // Imprime 1, 2, 3, 4
}
}
```
### Continue
```dart
void main() {
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue; // Salta esta iteracion
}
print(i); // Imprime 1, 2, 4, 5
}
}
```
### Break con Etiquetas
```dart
void main() {
outerLoop:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break outerLoop; // Sale del bucle externo
}
print('i=$i, j=$j');
}
}
}
```
## Iterando Colecciones
### Lista
```dart
void main() {
var list = [1, 2, 3, 4, 5];
// forEach
list.forEach((item) => print(item));
// for-in
for (var item in list) {
print(item);
}
}
```
### Conjunto
```dart
void main() {
var fruits = {'apple', 'banana', 'orange'};
for (var fruit in fruits) {
print(fruit);
}
}
```
### Mapa
```dart
void main() {
var ages = {'Alice': 30, 'Bob': 25};
// Iterar claves
for (var key in ages.keys) {
print('$key');
}
// Iterar valores
for (var value in ages.values) {
print('$value');
}
// Iterar entradas
for (var entry in ages.entries) {
print('${entry.key}: ${entry.value}');
}
}
```
## Resumen
- If-else: `if`, `else if`, `else`
- Switch: `switch`, `case`, `break`, `default` (o `case _`)
- Bucles: `while`, `do-while`, `for`
- Control de bucles: `break` (salir), `continue` (saltar)
- Usar `for-in` para iteracion simple sobre colecciones
- Expresiones switch (Dart 3) devuelven valores directamente
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →