Introducción
Las constantes; como sabemos, no cambian su valor en tiempo de ejecución. Son útiles para prevenir que nosotros mismos tengamos errores.
En el lenguaje de Arduino, que no es otra cosa que C y C++, podemos declarar constantes usando #define
y también const
. Cada una de ellas tiene su explicación.
#define
Es un macro que se ejecuta antes de la compilación. Para explicarlo de la manera más sencilla, supongamos que definimos lo siguiente:
#define NUMERO 1
void setup(){
pinMode(NUMERO, OUTPUT);
digitalWrite(NUMERO, HIGH);
}
Antes de que el código sea compilado, se hará un buscar y remplazar, en donde las ocurrencias serán (valga la redundancia) remplazadas por el valor verdadero. Por lo que (no podemos verlo, pero así es), el programa de arriba se convertiría en lo siguiente:
void setup(){
pinMode(1, OUTPUT);
digitalWrite(1, HIGH);
}
Es decir, remplazó las constantes por el valor verdadero.
Ventajas
- No ocupa memoria para almacenar las constantes, puesto que son remplazadas por sus valores
- Si vamos a usarlo para cosas pequeñas, como definir un pin, una cadena, etcétera, nos viene genial
Desventajas
- No tienen tipo. Por lo que el compilador no podrá avisarnos si algo estamos haciendo mal
- Son globales, por lo que debemos ser sumamente cuidadosos al referirnos a ellas
Const
Para declarar una constante, usamos const seguido del tipo de la variable. Por ejemplo:
const int numero = 1;
Al compilar, esto no se remplaza. Queda así como está. Y si el compilador detecta que en algún momento de nuestro código queremos asignarle un nuevo valor nos arrojará un valor.
Ventajas
Obedecen el ámbito de las funciones. Es decir, podemos declarar dos constantes con el mismo nombre en diferentes funciones:
void funcionUno(){
const int edad = 18;
}
void otraFuncion(){
const int edad = 50;
}
Y podemos usarlas dentro de cada función sin que choquen. También tiene la ventaja de que tiene tipo, por lo que el compilador nos informará los errores que puede que estemos cometiendo.
const
también permite declarar arreglos, cosa que #define
no.
Finalmente, cabe mencionar que el uso de const
es recomendado en lugar de #define
según este artículo.
Conclusión
Personalmente utilizo #define
porque no trabajo en proyectos grandes, y las librerías que incluyo no colisionan con el nombre de mis constantes.
Sin embargo, es una buena práctica usar const
en lugar de #define
según el sitio oficial de Arduino. Y si ellos lo dicen, es porque así debería ser. Además, en la mayoría de casos tenemos memoria de sobra para los proyectos que hacemos, por lo que no tenemos que ahorrarla usando #define
.
Muy buena explicacion, gracias
Información clara, concisa i totalmente útil.
Muchas gracias por aportarla!
Gracias por sus comentarios. Saludos!
Excelente información, clara y al punto. Entendí bien la diferencia.
Muchas gracias
Me da gusto ayudar
Te invito a suscribirte a mi blog en la barra lateral derecha. Saludos.