Learning   Examples | Foundations | Hacking | Links

Variables

Una variable es una ubicación para almacenar una porción de información. Tiene un nombre, un valor y un tipo. Por ejemplo, esta sentencia (llamado una declaración):

int pin = 13;

crea una variable cuyo nombre es pin, whose value is 13, y su tipo es int. Mas tarde en el programa, puedes hacer referencia a esta variable por su nombre, momento en el que puedes acceder a su valor y utilizarlo. Por ejemplo, en esta sentencia:

pinMode(pin, OUTPUT);

es el valor de pin (13) el que será pasado a la funciónpinMode(). En este caso, realmente no necesitas usar una variable, esta sentencia funcionaría igual de bien:

pinMode(13, OUTPUT);

La ventaja de una variable en este caso es que solo necesitas especificar el número del pin una única vez, pero puedes usarlo montones de veces. Así, si mas tarde decides cambiar el pin 13 por el 12, solo tienes que cambiarlo en un punto del código. Además puedes usar un nombre descriptivo que tenga que ver con el uso que vas a dar a la variable (ej. un programa para controlar un LED RGB (Rojo, Verde y Azul) podría tener variables llamada PinRojo, PinVerde y PinAzul).

Una variable tiene otras ventajas sobre un valor como un número. La más importante, puedes cambiar el valor de una variable mediante un asignador (representado por el signo igual). Por ejemplo:

pin = 12;

cambiará el valor de la variable a 12. Observa que no se especifica el tipo de la variable: este no cambia con la asignación. Es decir, el nombre de la variable está permanentemente asociado a un tipo; sólo esto cambia valor. [1] Ten en cuenta que tienes que declarar una variable antes de asignarle un valor. Si se incluye la instrucción anterior en un programa sin la previa declaración anterior, obtendras un mensaje del estilo: "error: pin was not declared in this scope" ("Error: pin no ha sido declarado en este ámbito").

Cuando se asigna una variable a otra, estás haciendo una copia de su valor y almacenando dicha copia en la ubicación de memoria asociada a la otra variable. Cambiando una no tiene efecto en la otra. Por ejemplo, después de:

int pin = 13;
int pin2 = pin;
pin = 12; 

sólo pin tiene el valor 12; pin2 tiene todavía 12.

Y ahora qué, puede que te preguntes ¿que significa la palabra "scope" (alcance) en ese mensaje de error anterior? Se refiere a la parte de tu programa en el que se puede usar la variable. Esto se determina por el lugar donde se declara. Por ejemplo, si quieres poder utilizar una variable en cualquier parte de tu programa, puedes declararla en la parte superior de tu código. Esto se llama variable global, aquí tienes un ejemplo:

int pin = 13;

void setup()
{
  pinMode(pin, OUTPUT);
}

void loop()
{
  digitalWrite(pin, HIGH);
} 

Como puedes ver, pin se usa tanto en la función setup() como en loop(). Ambas funciones hacen referencia a la misma variable, por lo que un cambio en una afectará al valor que tendrá en la otra, como en:

int pin = 13;

void setup()
{
  pin = 12;
  pinMode(pin, OUTPUT);
}

void loop()
{
  digitalWrite(pin, HIGH);
} 

Aquí, a la función digitalWrite() llamada desde loop() se le pasa el valor 12, ya que es el valor que se le asigna a la variable en la función setup().

Si tienes que utilizar una variable en una sola función, puedes declararla en la misma, en cuyo caso el ámbito (scope) de utilización se limita a esa función. Por ejemplo:

void setup()
{
  int pin = 13;
  pinMode(pin, OUTPUT);
  digitalWrite(pin, HIGH);
} 

En este caso, la variable pin sólo podrá ser usada dentro de la función setup(). Si tratas de hacer algo como esto:

void loop()
{
  digitalWrite(pin, LOW); // incorrecto: pin no tiene ámbito aquí.
} 

obtendrás el mismo mensaje que antes: "error: 'pin' was not declared in this scope" ("error: 'pin' no se declaró en este ámbito"). Es decir, a pesar de que has declarado pin en algún sitio en tu programa, está tratando de utilizarlo en alguna parte fuera de su ámbito de aplicación.

Te puedes preguntar ¿por qué no hacemos todas las variables globales? Después de todo, si no sé dónde puedo necesitar una variable, ¿por qué limitar su alcance a una sola función? La respuesta puede que sea más fácil de averiguar lo que te parece. Si una variable es global, su valor podría cambiarse en cualquier parte del código, lo que significa que necesita entender la totalidad del programa para saber qué va a pasar con la variable. Por ejemplo, si la variable tiene un valor que no esperabas, puede ser mucho más fácil de averiguar de donde viene el valor si la variable tiene un alcance limitado.

[block scope] [size of variables]

[1] En algunos lenguages de programación, como Python, los tipos se asocian con valores, no a los nombres de variables, y se pueden asignar valores de cualquier tipo a una variable. Esto se conoce como tipos dinámicos (dynamic typing).

Share