Variables y precedencia de operadores

Cuando se hacen programas, uno piensa en las variables como cantidades con un nombre cualquiera, pero en realidad, casi todos los lenguajes de programación tienen unas reglas comunes para la denominación de las variables. En ésta clase vimos esas reglas y aprendimos un poco de cómo se le escriben fórmulas matemáticas a la computadora para que calcule lo que nosotros queremos y no otra cosa.

Nombres de variables

Las variables son nombres que le damos a datos que el programa procesará para obtener un resultado dado. Dado que los programas es como pensar en algo que vamos a hacer pero dejarlo indicado para que alguien más lo haga, es muy frecuente que escribamos un programa que luego no entendemos bien (así haga bien lo que se le pide). Para hacer programas en cualquier lenguaje hay que ser muy organizados, tener en cuenta que para el computador todo debe estar perfectamente indicado y escribir variables que nos den la idea de qué contienen o para qué se usan. Un error común al comenzar a crear programas es asignarle a las variables nombres genéricos que no evocan algo. Supongamos que hacemos un programa para mostrar cómo preparar un arroz paso a paso solicitando al usuario la cantidad de personas que van a comer. Si el dato de la cantidad de personas se almacena en una variable llamada var1 es muy mala práctica, por que el nombre no da muchas pistas sobre qué contiene ésta, por otro lado si la variable se llama personas o  comensales, éstos nombres evocan que lo que almacena ésta tiene que ver con personas. Por otro lado, sería mucho más descriptivo si las variables se pudieran nombrar usando varias palabras en vez de una sola, sin embargo, la mayoría de lenguajes sólo admiten nombres de variables sin espacios. La solución es crear variables con nombres descriptivos cuyas palabras estén separadas de otra manera, todos los lenguajes admiten el guión bajo en los nombres de variables, por ejemplo, las variables del último ejemplo tendrían un mejor nombre si las llamaramos nro_de_personas o cantidad_de_comensales. No tenemos que ser tan explícitos pero sí usar nombres muy descriptivos.

Sobre las variables también es necesario recordar, que cuando un programa crea una variable, reserva una pequeña porción de la memoria y cuando la usa reclama el valor que exista en ella para mostrarlo o hacer un cálculo. En el ejemplo del arroz, sólo se le pide al usuario la cantidad de comensales, todos los demás valores los calcula el programa con fórmulas simples como dividir por 4 o multiplicar por 2, en el caso de crear una variable llamada por ejemplo, tazas_de_arroz y asignarle el cálculo nro_de_comensales/4 la variable nro_de_comensales ya debe existir y contener algún valor, en otras palabras, la instrucción que solicita al usuario la cantidad de personas que van a comer debe ejecutarse antes de la instrucción que calcula la cantidad de tazas de arroz.

En resumen, nombrar variables debe seguir las siguientes reglas:

  1. No usar espacios en el nombre (ni otros símbolos especiales como $%!&)
  2. Usar nombres descriptivos (si son varias palabras separarlas por _ )
  3. Crearlas antes de usarlas

Información versus datos

Otra discusión que hemos tenido insistentemente en nuestro curso es el concepto de información versus datos, el PC sólo manipula datos, es responsabilidad del programador que el usuario reciba información, es decir, de darle contexto a los datos. La primera indicación importante para contextualizar un programa es el objetivo del mismo: ¿Para qué sirve el programa y quién lo hizo?. En otras palabras, cualquier programa debe comenzar con un mensaje que declare para qué sirve y quién lo hizo.

Adicionalmente, cada vez que se dé al usuario una indicación, ésta debe ser tan detallada como sea posible (sin confundir al usuario), intentando en lo posible que éste no introduzca información equivocada. Por ejemplo, si hacemos un programa para calcular el índice de masa corporal de una persona, necesitamos solicitarle al usuario la estatura y el peso, pero la primera en metros y la segunda en kilogramos, el usuario puede pensar distinto e indicar la estatura en centímetros y el peso en libras. Es responsabilidad del programador indicarle al usuario que la estatura debe estar en metros, incluso el programa mismo debería verificar que el valor sí está en un rango válido (por ejemplo, una persona difícilmente medirá más de 2,5 mts o menos de 0,5 mts).

Así como a la hora de solicitarle datos al usuario es indispensable describir claramente lo que esperamos que digite para que el programa no dé un resultado equivocado, el resultado también debe estar contextualizado. Por ejemplo, si un programa busca convertir una temperatura en ºF (Fahrenheit) a ºC (Centígrados), el resultado no puede ser sólo un número. Un ejemplo concreto sería, si el usuario digitó 40 cuando se le preguntó por una temperatura en ºF, el resultado debería mostrar un mensaje similar a: «40 grados F son 4,44 grados C».

Para concluir éste tema, vamos a resumir las reglas sobre información en la creación de programas de DFD:

  1. Empezar declarando el objetivo del programa y el autor
  2. Indicar claramente qué se espera del usuario cada vez que sea necesario una intervención del usuario.
  3. Contextualizar los resultados para asegurarse de que tienen significado para el usuario.

Precedencia de operadores

Finalmente, el último tema tiene que ver con la forma en que las computadoras leen las fórmulas. Para ellas, las fórmulas se deben escribir en una sólo línea de texto, a diferencia de las fórmulas que usamos los humanos que ocupan varias líneas. Por ello, hay que decidir una forma de interpretar una fórmula para saber qué cálculo va a hacer una computadora.

Éste tema es llamado precedencia de operadores, dado que en una fórmula existen unos cálculos que se hacen antes que otros sin seguir la secuencia normal de la escritura (de izquierda a derecha). Por ejemplo, si a la PC se le escribe la fórmula 5*4+3/2^2 el orden en el cual se hace el cálculo no es ordenado. En orden sería primero 5*4=20, 20 + 3 = 23, 23/2 = 11,5 y 11,5^2 = 132,25. Para verificar, ingresen ésta fórmula en una hoja de cálculo precediendola por el símbolo igual (escriba =5*4+3/2^2 y luego oprima enter). En éste ejercicio se observa que el PC no hace el cálculo en orden, entonces ¿cuál es el orden?. Para saber de dónde sale éste resultado hay que saber que el PC hace primero las operaciones de mayor prioridad, en éste caso la potencia (2^2), luego la multiplicación y la división y finalmente la suma: 5*4+3/2^2 = 5*4+3/4 = 20+0,75 = 20,75. Si el resultado del cálculo que esperamos es el primer resultado que obtuvimos, debemos romper el orden en el cual la PC hace éste cálculo, forzándolo a hacerlo en el orden que deseamos (por ejemplo en orden), para ésto usamos los paréntesis: (((5*4)+3)/2)^2, en éste caso, el PC hace primero el cálculo que esté en los paréntesis más internos (5*4), luego a éste resultado le aplica la operación en el paréntesis que quede como más interno (20+3) y así sucesivamente.

La precedencia de operadores es el orden en el que realiza las operaciones:

  1. ()
  2. ^
  3. * /
  4. + –

Lo anterior significa, que la PC siempre hará el cálculo que esté en el paréntesis más interno primero y a su resultado le aplicará el siguiente operador en el orden de precedencia de la fórmula. A continuación un par de ejemplos.

Ejemplo: ¿Qué resulta de las siguientes fórmulas?

  • 2+2+4-4-2*6*6/2-8+8+16, la operación de mayor precedencia en ésta fórmula es la multiplicación y la división (entre éstas es en orden) por ende se realizan primero: 2+2+4-4-12*6/2-8+8+16 = 2+2+4-4-72/2-8+8+16 = 2+2+4-4-36-8+8+16, luego, como las operaciones restantes son sumas y restas se pueden hacer en orden: 2+2+4-4-36-8+8+16 = 4+4-4-36-8+8+16 = 8-4-36-8+8+16 = 4-36-8+8+16 = -32-8+8+16 = -40+8+16 = -32+16 = -16
  • (2+2+4)-4-2*6*6/(2-8+8+16), en éste caso, los paréntesis tienen precedencia, por ende se deben hacer primero (en orden), por lo tanto la fórmula se calcula de la siguiente manera: 2+2+4=8, 2-8+8+16=18; 8-4-2*6*6/18, luego habría que hacer las divisiones y multiplicaciones (en orden): 8-4-2-12*6/18 = 8-4-2-36/18 = 8-4-2-2, finalmente, como lo que queda son sumas y restas se hacen en orden: 4-2-2 = 2-2 = 0

Noten que la fórmula es prácticamente igual, la única diferencia son los paréntesis pero el resultado es muy distinto. Para verificar los cálculos anteriores, escriba en una hoja de cálculo =2+2+4-4-2*6*6/2-8+8+16 y en otra celda =(2+2+4)-4-2*6*6/(2-8+8+16)

Aunque los cálculos anteriores son medio inútiles, hay que tener en cuenta que todos los cálculos pueden involucrar variables, lo cual significaría que lo primero que hará la PC es reemplazar las variables por los valores que contengan y hacer el cálculo en el orden de precedencia descrito anteriormente.

Como es posible que una fórmula quede mal escrita (por olvido, por desatención  o por ignorancia de las reglas de precedencia) los resultados que arroje un programa deben ser corroborados haciendo manualmente un cálculo fácil de hacer del cual conozcamos su resultado.

A continuación dejo a disposición el resumen realizado por las estudiantes Ma. Alejandra Giraldo y Sandra García.

Esta entrada ha sido publicada en clase y etiquetada como . Guarda el enlace permanente.

Deja una respuesta