Saltar al contenido principal

Variables y Tipos

Los diferentes lenguajes manejan la declaración de variables y el tipado de diversas maneras. Comparemos cómo cada lenguaje declara variables y maneja los tipos.

Declaración de Variables​

// Primitives
let name = "John";
const age = 30;
let isActive = true;

// Arrays
let numbers = [1, 2, 3];
let items = ["apple", "banana"];

// Objects
let person = { name: "John", age: 30 };
let user = new Object();

// Maps
let map = new Map();
map.set("key", "value");

// Sets
let set = new Set([1, 2, 3]);

// Dynamic typing
let value = 42;
value = "now a string"; // allowed

Sistema de Tipos​

// Type checking - primitives
typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"

// Type checking - advanced
Array.isArray([1, 2]); // true
instanceof Date; // check instance
Object.prototype.toString.call([]); // "[object Array]"

// Implicit conversions
"5" + 3; // "53" (string concatenation)
"5" - 3; // 2 (numeric conversion)
true + 1; // 2 (boolean to number)

// Explicit conversions
Number("42"); // 42
String(42); // "42"
Boolean(1); // true
parseInt("42px"); // 42
parseFloat("3.14"); // 3.14

Puntos Clave​

  • Tipado estático vs dinámico -- Los lenguajes estáticos (Rust, Go, Java, C#, Swift) imponen tipos en tiempo de compilación, por lo que los errores de tipo se detectan antes de que el programa se ejecute. Los lenguajes dinámicos (JavaScript, Python, PHP, Ruby) permiten que las variables cambien de tipo en tiempo de ejecución: let x = 42; x = "hello" es válido en JavaScript. El tipado estático ofrece garantías más fuertes y mejores herramientas; el tipado dinámico acelera la creación de prototipos. Para bases de código grandes o proyectos en equipo, prefiere el tipado estático; para scripts rápidos o trabajo exploratorio, el tipado dinámico puede ser más flexible.

  • Inferencia de tipos -- Muchos lenguajes estáticos infieren tipos para que escribas menos código repetitivo. C# y Java 10+ usan var; C++ usa auto; Rust y Swift usan let; Go usa := para declaración corta. Por ejemplo, let x = 42 en Rust infiere i32, y name := "John" en Go infiere string. Zig y C generalmente requieren tipos explícitos. Usa inferencia donde mejore la legibilidad, pero agrega tipos explícitos cuando aclare la intención o cuando la inferencia produzca resultados sorprendentes.

  • Seguridad de tipos y conversiones -- Rust y Go evitan conversiones implícitas; mezclar i32 y f64 en aritmética requiere casts explícitos. JavaScript y PHP realizan coerción de tipos: "5" + 3 produce "53" en JavaScript (concatenación de strings) pero 8 en PHP (conversión numérica). C, C++ y Java permiten conversiones de ampliación (por ejemplo, int a long) implícitamente. Prefiere lenguajes con reglas de conversión estrictas para mayor robustez; ten cuidado con las conversiones implícitas en JavaScript y PHP para evitar bugs sutiles.

  • Estilos de declaración de variables -- JavaScript usa let y const; PHP usa $variable; Go usa var o :=; Python y Ruby usan nombres simples. Rust distingue let (inmutable) de let mut (mutable); Zig usa const y var. Swift usa let para constantes y var para variables. Adaptar tu modelo mental al estilo de declaración del lenguaje ayuda a evitar errores—por ejemplo, olvidar que const en JavaScript solo previene la reasignación, no la mutación de objetos.