Inferencia de tipos

Inferencia de tipos y la palabra reservada var

Fíjate en el código siguiente. El tipo que aparece al principio de cada declaración de variable puede ser deducido automáticamente por el compilador a partir del valor de inicialización situado a la derecha del signo igual. Por ejemplo, ¿puede determinar que el número 18 es un entero int y que Phone() devuelve un objeto de tipo Phone?

static void Main( )
{
    int age = 18; // El valor 18 de la derecha se infiere directamente como int
    Phone p = new Phone(); // El constructor de la derecha devuelve una instancia de Phone
}
Lenguaje del código: C# (cs)

Entonces, ¿se puede simplificar el código anterior?

C# ofrece la palabra reservada var para abreviar la escritura y sustituir las declaraciones de tipo explícitas.

static void Main( )
{
    var age = 18;
    var p = new Phone();
}
Lenguaje del código: JavaScript (javascript)

En este código todas las variables de la izquierda usan var. El compilador deduce el tipo adecuado a partir de la expresión de la derecha. Tras la compilación, ambos fragmentos de código son idénticos.

Observaciones importantes

  1. var no es un tipo dinámico. Solo es azúcar sintáctico. El compilador fija el tipo deducido en tiempo de compilación y no se puede modificar después; ambos códigos tienen el mismo significado.
  2. Normas obligatorias al usar var:
    • Solo sirve para variables locales, no para campos de clase
    • Es imprescindible asignar un valor inicial al declararlo. No se permite escribir solo var x;
    • El tipo deducido permanece fijo, no se pueden guardar datos de otro tipo en la variable después
  3. Diferencia fundamental: el var de C# ≠ el var de JavaScript. El var de JavaScript usa tipado dinámico débil y permite cambiar libremente el tipo de la variable. El var de C# es solo una abreviatura dentro de un lenguaje de tipado estático fuerte y no altera las características de C#.

Es decir, durante la compilación el compilador analiza la parte derecha y establece que age es de tipo int y p de tipo Phone. El resultado final coincide totalmente con el primer código.

No se pueden modificar sus tipos posteriormente. Mira este ejemplo:

class Program
{
    static void Main()
    {
        var age = 18;
        age = 3.14;
        var p = new Phone();
    }
}

class Phone
{
    public string Name { get; set; }
}Lenguaje del código: C# (cs)

Esta forma de escribir genera un error en C#, pero otros lenguajes como JavaScript o PHP lo permiten, ya que admiten cambiar el tipo de las variables.

JavaScript y PHP son lenguajes de tipado débil y dinámico; sus variables no tienen una restricción de tipo fija.

Ejemplo incorrecto


class Program
{
    static void Main()
    {
        var age = 18;
        age = 3.14;
        var p = new Phone();

        var isBuy;
    }
}

class Phone
{
    var price = 1000;
    var model = "iPhone";

    int count = 12;
}Lenguaje del código: C# (cs)

Inferencia de tipos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *