Variables y Tipos
## Objetivos de Aprendizaje
- Declarar e inicializar variables
- Comprender el sistema de tipos de Dart
- Dominar la inferencia de tipos
- Trabajar con final y const
## Variables
### Declaracion
```dart
var name = 'Alice'; // Tipo inferido
String greeting = 'Hello'; // Tipo explicito
name = 'Bob'; // Reasignacion permitida
// greeting = 123; // Error: tipo incompatible
```
### Reglas de Nombres
- Comenzar con letra o guion bajo
- Puede contener numeros (despues del primer caracter)
- Sensible a mayusculas/minusculas
- No puede usar palabras reservadas
```dart
var age = 25; // Valido
var _count = 0; // Valido
var price2 = 10.99; // Valido
// var 2ndPlace = 1; // Invalido: comienza con numero
// var class = 'test'; // Invalido: palabra reservada
```
## Inferencia de Tipos
### Palabra clave var
```dart
var city = 'Paris'; // Inferido como String
var population = 2100000; // Inferido como int
var area = 105.4; // Inferido como double
var isCapital = true; // Inferido como bool
// city = 123; // Error: no se puede asignar int a String
```
### Final y Const
```dart
final name = 'Alice'; // Se establece una vez, inferido como String
// name = 'Bob'; // Error: final no puede ser reasignado
const pi = 3.14159; // Constante en tiempo de compilacion
const maxItems = 100; // Constante en tiempo de compilacion
```
### Diferencia Entre final y const
```dart
final now = DateTime.now(); // OK: evaluado en tiempo de ejecucion
// const now = DateTime.now(); // Error: const debe ser en tiempo de compilacion
```
## Tipos Integrados
### Numeros
```dart
void main() {
// int: numeros enteros
int count = 42;
int hex = 0xFF;
// double: punto flotante
double price = 19.99;
double scientific = 1.5e10;
print('Count: $count, Price: $price');
}
```
### Cadenas
```dart
void main() {
String single = 'Comillas simples';
String double = "Comillas dobles";
String multiLine = '''
Esto es una
cadena de
varias lineas
''';
print(single);
print(double);
}
```
### Booleanos
```dart
void main() {
bool isActive = true;
bool isComplete = false;
// Operadores booleanos
print(isActive && !isComplete); // true
print(isActive || isComplete); // true
print(!isActive); // false
}
```
### Listas
```dart
void main() {
// List - coleccion ordenada
List numbers = [1, 2, 3, 4, 5];
var names = ['Alice', 'Bob', 'Charlie'];
print(numbers.length); // 5
print(names[0]); // Alice
print(names.contains('Bob')); // true
}
```
### Conjuntos
```dart
void main() {
// Set - coleccion desordenada de elementos unicos
Set fruits = {'apple', 'banana', 'orange'};
var colors = {'red', 'green', 'blue'};
print(fruits.contains('banana')); // true
fruits.add('grape');
print(fruits.length); // 4
}
```
### Mapas
```dart
void main() {
// Map - pares clave-valor
Map ages = {'Alice': 30, 'Bob': 25};
var scores = {'Math': 95, 'Science': 88};
print(ages['Alice']); // 30
print(scores.containsKey('Math')); // true
ages['Charlie'] = 35;
}
```
### Runes
```dart
void main() {
// Runes - puntos de codigo Unicode
String emoji = 'Hello 👋';
print(emoji.runes.toList()); // [72, 101, 108, ...]
// Interpolacion de cadenas con unicode
print('Heart: \u2665'); // Heart: ♥
print('Euro: \u20AC'); // Euro: €
}
```
## Conversion de Tipos
### Numero a Cadena
```dart
void main() {
int age = 30;
double price = 19.99;
String ageStr = age.toString();
String priceStr = price.toString();
String priceFixed = price.toStringAsFixed(2); // "19.99"
}
```
### Cadena a Numero
```dart
void main() {
String numStr = '42';
String decimalStr = '3.14';
int num = int.parse(numStr); // 42
double dec = double.parse(decimalStr); // 3.14
// Con manejo de errores
try {
int invalid = int.parse('abc');
} catch (e) {
print('Invalid number format');
}
}
```
### TryParse (Mas Seguro)
```dart
void main() {
int? result = int.tryParse('123');
print(result); // 123
int? invalid = int.tryParse('abc');
print(invalid); // null
}
```
## Tipo Dinamico
```dart
void main() {
dynamic value = 'text';
print(value); // text
value = 123;
print(value); // 123
// Evitar usar dynamic cuando sea posible
// pierde los beneficios de verificacion de tipos
}
```
## Alias de Tipo
```dart
typedef IntList = List;
typedef StringMap = Map;
void main() {
IntList numbers = [1, 2, 3];
StringMap names = {'first': 'Alice', 'second': 'Bob'};
}
```
## Resumen
- Las variables almacenan valores de datos
- `var` permite a Dart inferir el tipo; tipos explicitos tambien soportados
- `final` para constantes en tiempo de ejecucion (establecer una vez)
- `const` para constantes en tiempo de compilacion
- Tipos integrados: int, double, String, bool, List, Set, Map, Runes
- Usar `tryParse` para conversion segura de cadena a numero
- Preferir tipado fuerte sobre `dynamic`
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →