PHP: Incremento y decremento
Del lenguaje C a PHP se han trasladado dos operaciones:
- Incremento
++
- Decremento
--
A menudo se encuentran junto con bucles. Estas operaciones unarias aumentan y disminuyen en uno el número almacenado en una variable:
<?php
$i = 0;
$i++; // 0
$i++; // 1
$i--; // 2
$i--; // 1
Al utilizar la forma prefija, todo ocurre al revés. Primero se produce el cambio en la variable y luego se devuelve el nuevo valor:
<?php
$i = 0;
++$i; // 1
++$i; // 2
--$i; // 1
--$i; // 0
Parece que no hay ninguna diferencia entre las formas posfija y prefija. Pero aquí es donde comienzan las dificultades. Todas las demás operaciones no tienen efectos secundarios y simplemente devuelven un nuevo valor. A diferencia de ellas, el incremento y el decremento no solo devuelven un valor, sino que también modifican el valor de la variable.
Al utilizar la notación prefija, primero se produce el cambio en la variable y luego se devuelve. Al utilizar la notación posfija, ocurre lo contrario: primero se devuelve y luego se produce el cambio en la variable.
La regla funciona de la misma manera para el incremento y el decremento. Para simplificar, consideremos solo el incremento:
<?php
$x = 5;
echo ++$x; // => 6
echo $x; // => 6
echo $x++; // => 6
echo $x; // => 7
Discutamos qué sucede paso a paso en el código:
- Imprimimos
++$x
- esto es un incremento prefijo, por lo que primero el valor de la variable se incrementa en 1, luego se devuelve el resultado y se imprime en la pantalla. - El valor ha cambiado, por lo que
echo $x
imprime 6. - Ahora imprimimos
$x++
- esto es un incremento posfijo, por lo que primero se devuelve y se imprime el valor, y luego la variable se incrementa en 1. - El valor ha cambiado, por lo que
echo $x
imprime 7.
El incremento y el decremento pueden complicar significativamente el código. Es especialmente difícil cuando insertamos el incremento dentro de otras operaciones: $x = $i++ - 7 + --$h
.
Es imposible entender un código así, por lo que es mejor no utilizar tales construcciones. Por ejemplo, en el lenguaje JavaScript, cuando se verifica el código, el linter comienza a quejarse de inmediato cuando ve el uso de incremento y decremento.
Recomendamos utilizar estas construcciones de la siguiente manera:
- Dentro de una expresión, nunca mezcle funciones sin efectos secundarios con funciones con efectos secundarios (lo mismo se aplica a las operaciones).
- Utilice el incremento y el decremento solo donde no haya diferencia entre la forma prefija y la forma posfija: por separado de todo, en su propia línea de código.
Tarea
El incremento y el decremento no son operaciones muy importantes en PHP y siempre se pueden evitar. La tarea de esta lección no está directamente relacionada con este tema, pero puede utilizar el incremento y el decremento para acostumbrarse a ellos. De lo contrario, este ejercicio es otro entrenamiento para trabajar con bucles, cadenas y condiciones.
Escriba una función makeItFunny()
que tome una cadena como entrada y devuelva una copia de la cadena en la que cada elemento n-ésimo esté en mayúsculas. n se especifica como entrada a la función.
Para determinar cada elemento n-ésimo, se necesita el resto de la división %
. Piense en cómo se puede utilizar.
<?php
$text = 'I never look back';
// Cada tercer elemento
makeItFunny($text, 3); // 'I NevEr LooK bAck'
¿El ejercicio no pasa la prueba, qué debo hacer? 😶
Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.
Mi código funciona en mi entorno, pero no aquí 🤨
Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.
Mi código es diferente a la solución del profesor 🤔
Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.
En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.
Leí la lección, pero no entendí nada 🙄
Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.
Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.