Tutorial de programación en C para Linux Parte 12 – Operadores de asignación y expresiones condicionales
En esta serie de tutoriales de programación en C, ya hemos hablado de algunas cosas básicas como los operadores aritméticos, lógicos y relacionales, así como de los bucles condicionales como «if» y «while». Además, este tutorial se centrará en los operadores de asignación (distintos de =) y en las expresiones condicionales.
Empecemos con los operadores de asignación. Si hasta ahora has creado programas básicos en C (que estoy seguro de que lo habrás hecho sobre todo después de seguir nuestra serie de tutoriales), es muy probable que hayas hecho algo parecido a lo siguiente:
a = a + 1;
¿Verdad?
Lo nuevo que vamos a aprender hoy es que puedes reescribir esta expresión como lo siguiente:
a += 1;
Sí, el += es un operador y también se llama operador de asignación.
Ahora bien, si digo que el uso de operadores de asignación como éstos hace que el código sea más compacto y legible, algunos de vosotros podéis argumentar que, en el contexto del ejemplo que hemos utilizado, un operador de incremento habría sido igualmente bueno, ya que también se asegura de que el valor de «a» se incremente en 1.
a++;
Estoy de acuerdo, pero piensa en otros escenarios como el siguiente:
b = b + 10;
b = b + c
En estos casos, utilizar el operador de asignación facilita definitivamente la escritura, lectura y revisión del código.
¿Aún no estás convencido? Quizá el siguiente ejemplo genérico te dé una idea aún mejor del valor de los operadores de asignación. Echa un vistazo:
arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] = arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] + 5
Esta línea de código tarda en entenderse específicamente porque tienes que asegurarte de que las dos matrices (a cada lado del operador =) se refieren al mismo valor o no. En este caso, lo hacen, por lo que una forma mejor sería utilizar un operador de asignación de la siguiente manera:
arr1[arr2[integer1 + integer2] + arr3[integer3 + integer4] + arr4 [integer5 + integer6]] += 5;
Así pues, el uso de un operador de asignación en este caso no sólo hace que la línea sea muy fácil de entender, sino que también la hace más amigable para el compilador, en el sentido de que puede ayudar a que éste produzca un código eficiente.
Ahora que estás convencido (espero de verdad que lo estés) de que los operadores de asignación son útiles, aquí tienes una lista de operadores que tienen su correspondiente operador binario:
+ - * / % << >> & ^ |
Los cinco primeros operadores de la lista ya los hemos tratado en nuestros tutoriales hasta ahora. Los cinco últimos son operadores a nivel de bits, y los trataremos en uno de nuestros próximos tutoriales. Mientras tanto, aquí tienes una referencia rápida a los operadores de asignación correspondientes a algunos de estos operadores:
a += b;
a -= b;
a *= b;
a /= b;
a %= b;
Así que, en general, puedes tener en cuenta que lo siguiente
expression1 = (expression1) op (expression2)
puede expresarse como
expression1 op= expression2
donde ‘op’ es el operador en uso, como +, -, *, y otros.
Ten en cuenta que la siguiente expresión, así como las expresiones similares a ella
a *= b - c
se expandirán como:
a = a * (b-c)
Espero haber podido dejar claro el concepto de operadores de asignación, al menos a nivel básico. A continuación, vamos a hablar rápidamente de las expresiones condicionales.
Toma el siguiente ejemplo:
if(a==b)
c = c + 1;
else
c = c - 1;
Las expresiones condicionales te ayudan a escribir lógicas como éstas en una sola línea. He aquí cómo:
c = (a==b) ? (c+1) : (c -1)
Aquí, primero se comprueba la condición (a==b). Si es verdadera, entonces se asigna (c+1) a c, si no, se asigna (c-1) a c. Aquí tienes un código de ejemplo para que las cosas queden más claras:
int main()
{
int a = 6, b = 5, c = 9;
c = (a==b) ? (c+1) : (c -1) ;
printf("\n %d \n", c);
return 0;
}
Como aquí a no es igual a b, entonces se asigna a c (c-1), lo que significa que el nuevo valor de c pasa a ser 8. Por si acaso, aquí tienes la forma genérica de las expresiones condicionales:
expression1 ? expression2 : expression3
Conclusión
Espero que tengas una idea básica sobre los operadores de asignación y las expresiones condicionales. Ahora te animo a que las utilices en tus actividades de codificación cotidianas, y si te encuentras con algún tipo de problema, no olvides dejarnos un comentario aquí.