lunes, 19 de noviembre de 2018

Instrucción vacía

La mayoría de los lenguajes de programación tienen lo que se denomina instrucción vacía. Esta instrucción en realidad no realiza ninguna función práctica, pero permite rellenar un hueco allí donde se necesita.
Veamos un ejemplo en Python:
import sys
try:
    f = open('myfile','r')
except:
    pass
En este ejemplo, si el fichero myfile no existe saltará una excepción que será capturada por el bloque try. Como no se requiere ejecutar ninguna acción si salta la excepción y la sección except hay que colocarla, se pone en ella la instrucción vacía pass de Python.
Veamos cuál es la instrucción vacía en bash y qué usos se le puede dar.

Instrucción vacía en bash

En bash se dispone de la instruccion “:”, que no ejecuta ninguna acción como tal. Aunque a priori no resulta de mucha utilidad, se le pueden dar algunos usos interesantes.

Uso como instrucción requerida dentro de un bloque

Todo bloque necesita al menos de una instrucción en su interior. Por ejemplo:
if [ $VAR -eq 1 ]; then
    echo "Vale 1"
else
    echo "Distinto de 1"
fi
Aquí, tanto la parte del if como la del else tienen una instrucción. Aunque no tenga mucho sentido, se podría rellenar el hueco del if si solo se desea actuar en caso de no valer 1:
if [ $VAR -eq 1 ]; then
    :
else
    echo "Distinto de 1"
fi

Uso como comentario

El símbolo “:” se puede usar como comentario dado que lo que le sucede no se tiene en consideración.
VAR=4
if [ $VAR -eq 1 ]; then
    : Aquí nunca entrará
    echo "Vale 1"
else
    echo "Distinto de 1"; : Por aquí siempre pasará
fi
Indicar que si se quiere usar a modo de comentario, como se trata de un comando habrá que separarlo por “;” del comando anterior, como ocurre en el bloque else.

Uso para activar un modo depuración

En ocasiones puede ser útil añadir comentarios a un script para comprobar su funcionamiento durante los test de desarrollo. No obstante, una vez se desea dejar una versión final del código hay que revisar linea por linea para eliminar estos comentarios. Y puede ocurrir que en un futuro se puedan necesitar.
Se puede usar la instrucción vacía para hacer esta función. Veamos un ejemplo:
#!/usr/bin/env bash

if [[ ! -z "$1" && "$1" == "--debug" ]]; then
    DEBUG="echo "
else
    DEBUG=":"
fi

if [ : ]; then
    $DEBUG "Entro al IF"
fi
Si este script se ejecuta con el parámetro --debug, los comentarios que se hayan introducido en el código se mostrarán por pantalla pues se hará un echo de ellos. Sin embargo, en cualquier otro caso la instrucción vacía hará la función de comentario para evitar su salida por pantalla.

Uso equivalente a true

Como se ha visto en el ejemplo anterior, el comando vacío hace las veces de true cuando se usa en una expresión de evaluación:
#!/usr/bin/env bash

while [ : ]; do
    date
done