una - ¿Por qué usar constantes en la programación?
variables y constantes en programacion (10)
Constante es cuando solo quieres compartir la memoria, y no cambia.
He estado revisando un poco de C estudiando usando el libro Beginning C de Ivor Horton. Llegué al punto de declarar constantes que parece mezclarse con variables en la misma oración.
Solo para aclarar, ¿cuál es la diferencia al especificar constantes y variables en C, y realmente, cuando necesitas usar una constante en lugar de una variable? Sé que la gente dice usar una constante cuando la información no cambia durante la ejecución del programa, pero realmente no puedo pensar en un momento en que una variable no pueda ser utilizada en su lugar.
El uso de constantes es más una forma de programación defensiva, para protegerse de usted mismo, de cambiar accidentalmente el valor en algún lugar del código cuando está codificando a las 2 am o antes de haber bebido su café.
Técnicamente, sí, puedes usar una variable en su lugar.
Es una forma realmente fácil de atrapar una cierta clase de errores. Si declara una variable const
, y accidentalmente intenta modificarla, el compilador lo llamará.
La palabra clave const
se usa a menudo para los parámetros de función, particularmente los punteros, para sugerir que la memoria a la que apunta el puntero no será modificada por la función. Mire la declinación para strcpy
por ejemplo:
char *strcpy(char *dest, const char *src);
De lo contrario, por ejemplo, una declaración como
const int my_magic_no = 54321;
podría preferirse sobre:
#define MY_MAGIC_NO 54321
por razones de seguridad tipo.
Las constantes son muy necesarias en lo que respecta a la declaración y la inicialización de la variable para cualquier fin, como al comienzo del ciclo, para verificar la condición dentro de la declaración if -else, etc.
Para obtener más información, puede leer cualquiera de los siguientes artículos:
Las constantes tienen varias ventajas sobre las variables.
Las constantes proporcionan cierto nivel de garantía de que el código no puede cambiar el valor subyacente. Esto no es de mucha importancia para un proyecto más pequeño, pero importa en un proyecto más grande con múltiples componentes escritos por múltiples autores.
Las constantes también proporcionan una buena pista al compilador para la optimización. Como el compilador sabe que el valor no puede cambiar, no necesita cargar el valor de la memoria y puede optimizar el código para que funcione solo con el valor exacto de la constante (por ejemplo, el compilador puede usar turnos para la multiplicación / división si la const es un poder de 2.)
Las constantes también son inherentemente estáticas: puede declarar la constante y su valor en un archivo de encabezado y no tener que preocuparse por definirlo exactamente en un solo lugar.
No usar const puede significar que alguien en un proyecto de equipo podría declarar dónde int FORTY_TWO = 42
y hacerlo igual a FORTY_TWO = 41
en otro lugar por otro miembro del equipo. Por lo tanto, el fin del mundo sucede y también pierdes la respuesta a la vida. con const
aunque nada de esto sucederá jamás. Además, const
se almacena en otro lugar de la memoria, en comparación con el almacenamiento de variables normales, y es más eficiente.
Para un lenguaje de bajo nivel como C, las constantes permiten varias optimizaciones de compilación.
Para un lenguaje de programación en general, realmente no los necesita. Los lenguajes dinámicos de alto nivel como Ruby y JavaScript no los tienen (o al menos no en un verdadero sentido constante). Las variables se usan en su lugar, tal como sugirió.
Por un lado, la optimización del rendimiento.
Más importante aún, esto es para lectores humanos. Recuerde que su público objetivo no es solo el compilador. Ayuda a expresarse en el código y evitar comentarios.
const int spaceTimeDimensions = 4;
if(gpsSattelitesAvailable >= spaceTimeDimensions)
Good();
Una variable, como puede adivinar por el nombre, varía con el tiempo. Si no varía, no hay "pérdida". Cuando le dices al compilador que el valor no cambiará, el compilador puede hacer un montón de optimizaciones, como enunciar directamente el valor y nunca asignar ningún espacio para la constante en la pila.
Sin embargo, no siempre puede contar con que su compilador sea lo suficientemente inteligente como para poder determinar correctamente si un valor cambiará una vez configurado. En cualquier situación donde el compilador sea incapaz de determinar esto con 100% de confianza, el compilador se equivocará por el lado de la seguridad y asumirá que podría cambiar. Esto puede dar lugar a diversos impactos en el rendimiento, como evitar la alineación, no optimizar ciertos bucles, crear código de objeto que no sea tan fácil para el paralelismo.
Debido a esto, y dado que la legibilidad también es importante, debe esforzarse por usar una constante explícita siempre que sea posible y deje las variables para las cosas que realmente pueden cambiar.
En cuanto a por qué se usan constantes en lugar de números literales:
1) Hace que el código sea más legible. Todo el mundo sabe lo que 3.14 es (con suerte), no todo el mundo sabe que 3.07 es la tasa de impuesto a la renta en PA. Este es un ejemplo de conocimiento específico de dominio, y no todos los que mantengan su código en el futuro (por ejemplo, un software de impuestos) lo sabrán.
2) Ahorra trabajo cuando haces un cambio. Ir y cambiar cada 3.07 a 3.18 si la tasa de impuestos cambia en el futuro será molesto. Siempre quiere minimizar los cambios e idealmente hacer un solo cambio. Cuantos más cambios concurrentes deba realizar, mayor será el riesgo de que se olvide de algo, lo que generará errores.
3) Evita los errores de riesgo. Imagine que hay dos estados con una tasa de impuesto a la renta de 3.05, y luego uno de ellos cambia a 3.18 mientras que el otro se queda en 3.07. Simplemente yendo y reemplazando, podrías terminar con errores severos. Por supuesto, muchos valores constantes enteros o de cadena son más comunes que "3.07". Por ejemplo, el número 7 podría representar el número de días de la semana y algo más. En programas grandes, es muy difícil determinar qué significa cada valor literal.
4) En el caso de texto en cadena, es común usar nombres simbólicos para cadenas para permitir que los grupos de cadenas cambien rápidamente en el caso de admitir múltiples idiomas.
Tenga en cuenta que, además de las variables y las "variables constantes", también hay algunos idiomas con enumeraciones. Una enumeración en realidad le permite definir un tipo para un pequeño grupo de constantes (por ejemplo, valores de retorno), por lo que su uso proporcionará seguridad de tipo.
Por ejemplo, si tengo una enumeración para los días de las semanas y para los meses, se me avisará si asigno un mes al día. Si solo uso constantes enteras, no habrá ninguna advertencia cuando el día 3 esté asignado al mes 3. Siempre desea seguridad de tipo, y mejora la legibilidad. Las enumeraciones también son mejores para definir el orden. Imagine que tiene constantes para los días de la semana, y ahora quiere que su semana comience el lunes en lugar del domingo.