Tipos de Datos y Coherción
Estudio comparativo: C, JavaScript, Python y Java.
SLIDE 1 / 6
1. Clasificación de los Tipos de Datos
Los tipos de datos le informan al compilador o intérprete cómo interpretar los secuencias de bits en la memoria RAM.
Tipos Primitivos: Valores atómicos almacenados directamente (números, caracteres, booleanos).
Tipos de Referencia / Compuestos: Estructuras compuestas (arreglos, objetos, clases) almacenadas en el Heap.
REPRESENTACIÓN EN MEMORIA
int age = 25 [Primitive: 4 Bytes]
String name = "Ana" [Reference: Heap Addr]
2. Primitivos entre Lenguajes
- C: char (8-bit), int (32-bit), float (32-bit IEEE), double.
- JavaScript: number (64-bit float), bigint, string, boolean, symbol, null, undefined.
- Python: int (precisión arbitraria), float, bool, str, NoneType.
- Java: byte, short, int, long, float, double, boolean, char.
primitives.ts
// JS/TS: number abarca enteros y flotantes
let cantidad = 42;
let precio = 19.99;
// C / Java: Explicitez estricta
int c_cantidad = 42;
double c_precio = 19.99; 3. Tipos Compuestos y de Referencia
Almacenan colecciones de datos o estructuras complejas mediante direcciones que apuntan al Heap.
Arreglos / Arrays: Secuencias contiguas de elementos.
Objetos / Structs: Agrupaciones de pares clave-valor o atributos.
structures.py
# Python List (Doble puntero a Heap)
items = [1, "dos", 3.0]
# C Struct (Bloque continuo contiguo)
struct Point { int x; int y; }; 4. Estático vs Dinámico & Fuerte vs Débil
Java (Estático / Fuerte): Chequeo en compilación; prohíbe operaciones incompatibles.
C (Estático / Nivel Medio): Chequeo en compilación; permite reinterpretación de punteros.
JavaScript (Dinámico / Débil): Chequeo en tiempo de ejecución con coherción implícita automática.
Python (Dinámico / Fuerte): Chequeo en tiempo de ejecución; rechaza conversiones implícitas no válidas.
typing_comparison.js
// JS (Débil): "5" + 2 === "52"
console.log("5" + 2);
# Python (Fuerte): TypeError!
# print("5" + 2) 5. Coherción de Tipos y Casting
La conversión de tipo puede ser explícita (Casting) o implícita (Coherción en runtime).
- Casting Explícito: `(int) 3.14` (C/Java), `int("5")` (Python).
- Coherción Implícita: Ocurre automáticamente en JS al usar operadores binarios como `+` o `==`.
casting.c
double pi = 3.14159;
int entero_pi = (int) pi; // Trunca a 3
char c = 'A';
int ascii = (int) c; // 65 6. Inspector Interactivo de Tipos
Seleccioná una expresión para evaluar la respuesta de cada lenguaje:
JavaScript
"105" (string)
Python
TypeError: can't concat str to int
C
Error de Compilación (Tipos incompatibles)
Java
"105" (String via StringBuilder)
Navegación: Flechas Izq / Der