Es uno de los grandes desconocidos de PHP. Una de esas características que, estando presentes en otros lenguajes no son tan ampliamente utilizadas como deberían. De hecho, en PHP, ¿cuántas veces hemos iterado con datos que tenemos en memoria? Es decir, recorremos los elementos de un array uno a uno y realizando operaciones con cada uno de ellos. Entonces pueden pasar varias cosas, puede que los recorramos todos, o puede que cuando se cumpla una determinada condición decidamos que no vamos a recorrer más.… Leer artículo completo
Operador coma. Cómo incorporarlo a nuestro día a día con muchos ejemplos en C
Seguro que lo has visto cientos de veces por ahí, pasando desapercibido en multitud de programas hechos en C. Es más, incluso el primer día que empezaste a ver programación os visteis las caras y casi no te diste cuenta. Incluso puede que lo hayas utilizado sin siquiera ser consciente de lo que hace en realidad.Otros muchos sí que sabréis de qué va este operador, y me gustaría que los que sí sabéis de qué va, sugirierais más ejemplos en los comentarios.… Leer artículo completo
Cómo saber si existe una función en Bash, saber qué estamos ejecutando y más
En nuestra historia como programadores, hacemos infinidad de llamadas a funciones propias, de terceros, de biblioteca, a otros programas a un alias, etc Y si queremos que nuestros scripts sean lo más robustos posible, debemos tener claro antes de la ejecución que aquello que llamamos se puede ejecutar o dar opciones si algún comando o función no existe.
Por ejemplo, nuestro script necesita hacer una llamada a wget de este tipo:
wget -O salida http://totaki.com
Pero queremos hacer que sea compatible con otros sistemas, por ejemplo, con cURL, y no podemos cambiar uno por otro, pues con curl sería con o minúscula:
curl -o salida http://totaki.com
Nuestro script podrá ser:
1
2
3
4
5
6
7
8if [ -n "$(which wget)" ]; then
wget -O salida http://totaki.com
elif [ -n "$(which curl)" ]; then
curl -o salida http://totaki.com
else
echo "No puedo descargar el fichero"
exit 1
fiDe modo que probamos la existencia de diferentes programas y utilizamos el que tengamos a disposición.… Leer artículo completo
Cómo procesar múltiples argumentos de entrada en scripts para Bash
Los argumentos de entrada de un programa nos sirven para modificar ligeramente el comportamiento de un programa dentro de las opciones que nos permita su desarrollador. Y, sobre todo, siempre que trabajamos con programas para consola, es muy buena idea permitir que nuestros usuarios puedan utilizar funciones extras o especificar sus propios parámetros de trabajo sin necesidad de modificar el programa.
Si trabajáis con lenguajes como C o C++ podéis leer algo de información al respecto:
- Cosas que damos por hechas en C/C++: int main(int argc, char *argv[])
- Cómo gestionar los parámetros de nuestros programas con getopt en C
- Cómo gestionar los parámetros de un programa en C (parte 2: parámetros largos)
Pero, cuando hacemos algún script en Bash para línea de comandos, también puede resultar muy útil, tanto para especificar archivos de entrada, como las propias opciones de nuestro programa.… Leer artículo completo
Bucles y cursores en MySQL con ejemplos
Hace mucho tiempo que quería escribir sobre esto. Y aunque es recomendable no abusar de los bucles en MySQL, es más, a veces no son necesarios, y siempre hay que buscar una solución que no los use, a veces no la vamos a encontrar y será en esos casos cuando debamos utilizarlos.
Veamos un bucle muy sencillo, parecido a un for de los de toda la vida, en el que contamos del 1 al 9:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17cuando hagamos:
1Veremos algo como esto:
+———+
| counter |
+———+
| 1 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 2 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 3 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 4 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 5 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 6 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 7 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 8 |
+———+
1 row in set (0.01 sec)+———+
| counter |
+———+
| 9 |
+———+
1 row in set (0.01 sec)Query OK, 0 rows affected (0.01 sec)
Vemos que el código que iteraremos está entre LOOP…END LOOP, lo que aparece justo antes (my_loop) es una etiqueta para nombrar ese bucle.… Leer artículo completo
Preincremento y postincremento (x++ != ++x)
Hace unos días un alumno de clases particulares me preguntó la diferencia entre estos dos; me pareció una pregunta interesante ya que los únicos usos que había visto eran como única sentencia:
a++;
++a;En este uso no hay diferencia, puesto que hagamos las cosas en el orden que las hagamos el resultado será igual; aunque en este ejemplo tampoco se tiene clara la idea del orden de las operaciones. Pero veamos otro ejemplo:
1
2
3
4
5
6
7
8
9
10#include <stdio.h>
int main(int argc, char *argv[])
{
int a=10;
int b;
b=a++;
printf("a=%d\nb=%d\n", a, b);
}Vemos que estamos realizando un postincremento de a, o lo que es lo mismo, incrementamos la variable a después de las demás operaciones (asignar a b el valor de a).… Leer artículo completo
Últimos comentarios