4. Aritmética básica

Estoy seguro de que has escuchado que la programación es todo matemáticas. ¿No es cierto? Ha llegado la hora de las matemáticas. Comencemos.

\left|\sum_{i=1}^n a_ib_i\right|
\le
\left(\sum_{i=1}^n a_i^2\right)^{1/2}
\left(\sum_{i=1}^n b_i^2\right)^{1/2}

Ahora, resuelve la X.

Bromeaba de nuevo. De hecho, no hay X en esa ecuación. De hecho, ni siquiera es una ecuación por lo que ha sido una broma terrible. Lo cierto es, que ni siquiera sé lo que hace esa ecuación. No somos gurús de las matemáticas (no todos).

Sentencias

Vamos a intentar algo más cercano a mi nivel de matemáticas. Sabes cómo hacer ficheros PHP y sabes cómo abrir y cerrar etiquetas PHP. Así que saltemos directamente a un fichero PHP. Vamos a llamarlo mates.php. He aquí el contenido.

Ejemplo 01: Suma.
1 <?php
2 	3 + 3;
3 ?>

Un momento, espera un segundo. No vamos a imprimir nada tras nuestro código PHP. ¿Por qué preocuparnos en poner una etiqueta PHP de cierre? Lo cierto es, que la mayoría de los programadores PHP, omiten esta etiqueta si no hay contenido que siga al código. Vamos a hacerlo.

Ejemplo 02: No necesitamos etiqueta de cierre.
1 <?php
2 	3 + 3;

¡Mucho mejor!

Bueno, en el caso de que tus matemáticas no sean tan buenas como las mías, déjame ayudarte un poco. Cuando sumas tres y tres, te da seis. Vale, ahora estás listo.

La línea 3 + 3; contiene una sentencia. Es una línea de PHP que será evaluada por PHP. Normalmente terminan con punto y coma. Así es como se ven ;. Al principio se te olvidará siempre, pero no te preocupes, pronto estarás incluso terminando tus frases con ellos;

Dado que ahora entiendes la suma básica, ¿qué piensas que pasará cuando ejecutemos el fichero?

Siete punto cinco.

Bien, veamos si estás en lo cierto. Ve y ejecuta php mates.php para ver qué ocurre.

Ejemplo 03: Salida.
1 [Nada por aquí]

¡Vaya! Absolutamente nada. Este lenguaje es estúpido. Dejémoslo. Vale, sigo bromeando. Tengo un sentido del humor peculiar, no te preocupes, te acostumbrarás.

¿Por qué no vimos nada en la pantalla? Bueno, eso es porque no le dijimos a PHP que nos mostrara nada. PHP es obediente. Vamos a decirle que nos de la respuesta. Usemos echo. Es una construcción del lenguaje que nos permite ver el resultado de una sentencia.

Vamos a alterar la sentencia para incluir echo.

<?php echo 3 + 3;

Allá vamos. Colocamos echo delante de la sentencia de la que queremos ver el resultado. Vamos a intentar ejecutar nuestra aplicación de nuevo. Allá vamos.

Ejemplo 05: Salida.
1 6

¡Woohoo! ¡Seis! ¡NO SIETE PUNTO CINCO! Hemos conseguido ver el resultado de nuestra primera sentencia evaluada con PHP. Maravilloso, ¿no te parece?

Podría haber hecho esto en una calculadora

Lo sé, lo sé. No es exactamente ciencia para cohetes. La ciencia para cohetes se cubre en otro capít… Espera, ya he dicho esa broma en otro libro. Necesito conseguir nuevo material.

Operadores aritméticos

Sé que nuestro ejemplo de 3 + 3 es código sencillo pero pronto nos haremos con cosas más grandes y mejores. ¿Sabías que hay más operadores aritméticos? Estoy seguro de que algunos de ellos te suenan de algo.

1 + Suma
2 - Resta
3 * Multiplicación
4 / División
5 % Módulo

Estoy seguro de que habrás visto algunos de esos operadores anteriormente. Sé que la multiplicación y la división son un poco diferentes a los signos que aprendiste en el colegio. Esto es común a la mayoría de los lenguajes de programación y descubrirás que el signo de división es definitivamente más sencillo de escribir en el teclado. No dejes que te preocupen, antes de que te des cuenta te habrás acostumbrado a ellos.

Si no has usado el operador ‘Módulo’ anteriormente, es sencillo de explicar. Puede ser usado para calcular el resto de una divisón. Por ejemplo, la operación ‘3 % 2’ resultaría en la figura de ‘1’. Se usa normalmente para determinar si un número es par o impar, dividiéndolo entre dos.

Ahroa vamos a darle a PHP algo difícil:

Ejemplo 06: Matemáticas difíciles.
1 <?php
2 echo 4 + 3 * 2 / 1;

Así que, ¿cuál es el resultado? Bueno, puede ser difícil calcularla en nuestra mente ya que no sabemos en qué orden calcular. ¿Deberíamos sumar primero? ¿O dividir primero? Hmm. ¡Difícil!

Por supuesto, en matemáticas aprendemos a usar paréntesis para separar las ecuaciones. Podemos hacer lo mismo con PHP. Vamos a intentarlo.

Ejemplo 07: Paréntesis para separar operaciones.
1 <?php
2 echo (4 + 3) * (2 / 1);

Ahora podemos estar seguros de que 4 * 3 y 2 / 1 son evaluados primero y los resultados serán multiplicados. Genial, ejecutemos y veamos el resultado…

Ejemplo 08: Salida.
1 14

Genial, ¿pero eso no es hacer trampas? ¿Qué conseguiríamos sin los paréntesis? Vamos a quitarlos.

Ejemplo 09: Sin paréntesis.
1 <?php
2 echo 4 + 3 * 2 / 1;

¿Cuál es el resultado? Ejecutémoslo.

Ejemplo 10: Salida.
1 10

Vaya, esto es algo totalmente distinto. ¿Por qué? Bueno, eso es porque PHP no está gestionando los operadores en el mismo orden. Vamos a ver el orden en que se gestionan los operadores.

Este es el orden:

1 * Multiplicación
2 / División
3 % Módulo
4 + Suma
5 - Resta

El operador con la prioridad más alta está en la parte de arriba de la tabla. Esto significa que cuando PHP examina 4 + 3 * 2 / 1, primero calcula 3 * 2 = 6, luego 6 / 1 = 6 y finalmente 4 + 6 para obtener 10.

Cuando escribo cosas matemáticas, me gusta añadir paréntesis para evitar confusiones. También me parece que ayuda a clarificar lo que se pretende hacer con la línea, haciendo que sea más legible.

Procedimiento

El código PHP se procesa de manera procedural. Esto significa que se ejecuta sentencia a sentencia. Aunque es posible poner más de una sentencia en una línea, es poco común y el resto de programadores no suelen hacerlo así que ejecutemos el código línea a línea. Podemos ver esto en acción añadiendo más sentencias a nuestro fichero. Vamos a probar lo siguiente:

Ejemplo 11: Múltiples sentencias.
1 <?php
2 echo 2 + 2;
3 echo 3 + 3;
4 echo 4 + 4;
5 echo 5 + 5;

Ahora ejecutemos el fichero…

Ejemplo 12: Salida.
1 46810

¿!CUARENTA Y SEIS MIL GIGAQUEEEE!?

¡Cálmate lector! Le dijimos a PHP que mostrara los resultados, nada de espacios ni nuevas líneas. Esto significa que PHP ha calculado los valores correctamente. Si añadimos espacios, el resultado que PHP nos ha dado es…

4 6 8 10

…ahora vemos que los cálculos son, de hecho, correctos. Únicamente ocurre que PHP es muy obediente y ha mostrado los valores uno detrás del otro.

He mencionado con anterioridad que PHP es un lenguaje flexible. Vamos a ver eso, ¿no te parece? Hasta ahora, nuestras sentencias solo tienen un espacio entre cada ‘palabra’ (o número). Vamos a añadir algunos espacios adicionales en un formato inconsistente para ver qué ocurre. He aquí nuestro código modificado.

Ejemplo 14: Espacios en blanco.
1 <?php
2 echo    2           +   2;
3 echo                   3   +3;
4 echo 4+4;
5 echo    5+     5        ;

Aunque esto no es que sea muy bonito, si ejecutaras el código, descubrirías que el código funciona a la perfección. A PHP no le importan la cantidad de espacios en blanco entre las palabras y el código. Símplemente lidia con ellos.

Observarás que algunas de las operaciones aritméticas, por ejemplo 4+4 no necesitan un espacio para nada. Aunque es cierto, no es consistente en todas las variaciones. Por ejemplo, considera lo siguiente:

Ejemplo 15: Sin espacios tras echo.
1 <?php
2 echo5 + 5;

Si intentas ejecutar esto, descubrirás que PHP lanzará un error ‘Use of undefined constant echo5 - assumed ‘echo5’. Esto es porque PHP no sabe qué es la palabra echo5 ni lo que debe hacer. Por este motivo, lo mejor es colocar al menos un espacio entre cada ‘palabra’.

Por otro lado, las sentencias. Si fuéramos masoquistas, podríamos elegir poner cada sentencia en la misma línea. He aquí un ejemplo.

Ejemplo 16: Múltiples sentencias, una línea.
1 <?php echo 2 + 2; echo 3 + 3; echo 4 + 4; echo 5 + 5;

Este código es perfectamente válido, pero no verás a muchos programadores haciéndolo. Tener una sentencia en cada línea, hace el código mucho más sencillo de leer y entender. También causa problemas con los sistemas de control de versiones.

Hemos visto que a PHP no le importa si usas muchos espacios en el código, pero también considera una nueva línea como un espacio en blanco. Esto implica que el siguiente fragmento es completamente legal.

Ejemplo 17: Una sentencia, múltiples líneas.
1 <?php
2 echo
3 2
4 +
5 2
6 ;

¿No me crees? ¡Ve e inténtalo! Aunque el código funciona como se pretende, no es lo más legible del mundo. Si te pillo escribiendo código así, ¡te daré una azotaina!

No obstante, hay un uso práctico para los saltos de línea. Si la línea que estás escribiendo es demasiado larga, también se convertirá en un problema de legibilidad. Podemos resolver este problema aplicando saltos para que resulte legible. Muchos programadores también aplican cuatro espacios (o tu elección de tabulación) en la siguiente línea, para indicar que es una continuación.

He aquí un ejemplo de saltos de línea apropiados.

Ejemplo 18: Saltos de línea limpios.
1 <?php
2 echo (3 * 5) / (7 / 12) * (7 * 6) + (7 % 3)
3 	+ (6 + 7) * (12 / 3);

Aquí hay matemáticas serias, pero espero que lo veas más sencillo de leer.

Merece la pena destacar que puedes también dejar líneas en blanco para añadir claridad. He aquí un ejemplo.

Ejemplo 19: Líneas adicionales por claridad.
1 <?php
2 echo 3 + 2;
3 echo 7 * 7;
4 echo 5;

Así que, como ves, PHP puede ser extremadamente flexible. Pero no te olvides de añadir un punto y coma al final de la línea, ya que nunca te perdonará.

JAMÁS.