No está mal, funciona

“No está mal, funciona”, es lo que me dicen muchos de mis alumnos cuando les reviso su código y les señalo algunos errores. Sí, funciona, pero eso no es lo único importante. Por ejemplo, veamos el siguiente fragmento de código escrito en PHP:

if(($fichero = @file("testimonios.txt")) == false)
  echo "No se ha podido abrir el fichero";
else
{
  $num = rand(1, count($fichero));
  $i=1;
  foreach($fichero as $numLinea => $linea)
  {
    if ($i==$num)
    {
      list($titulo, $fecha, $contenido) = explode('###', $linea);
      echo "<fieldset><legend><h2>".htmlspecialchars($titulo) ."</h2></legend>";
      echo htmlspecialchars($contenido)."<br /><br />".htmlspecialchars($fecha);
      echo "</fieldset>";
    }
    $i = $i+1;
  }
}

El propósito de este código es leer un fichero (“testimonios.txt”) que tiene el siguiente formato, en el que cada línea es un testimonio de una persona:

titulo###fecha###contenido
titulo###fecha###contenido
titulo###fecha###contenido

Se tiene que elegir una línea al azar y mostrarla.

¿Qué problemas tiene este código?

  1. Utiliza un bucle para localizar en el array el testimonio a mostrar: los arrays son estructuras de acceso directo, si tienes una posición ($num), accedes y punto, no necesitas un bucle para acceder a una posición.
  2. Parece que tampoco entiende el manejo de foreach(): necesita $i para saber en qué posición está, cuando $numLinea ya le valdría.
  3. Cuando por fin encuentra el testimonio y lo muestra ($i==$num), no finaliza el bucle, sigue y sigue buscando en el array hasta llegar al final.
  4. Utiliza el fieldset y el legend, cuyo propósito es agrupar controles en un formulario, para mostrar el testimonio en una “caja bonita” con borde.

Esto no lo ha hecho un alumno de primero, es de un alumno de tercero.

Profesor del Departamento de Lenguajes y Sistemas Informáticos de la Universidad de Alicante (España). Interesado en el desarrollo y la accesibilidad web.

3 comentarios sobre “No está mal, funciona

  1. El tema sobre todo es de optimización. Entonces, la pregunta no es que funcione ahora, es cuando tengamos varios miles de entradas y cuando vengan muchos usuarios a por ese dato siga funcionando bien.
    Como dices, el bucle en este caso sobra, si quisiéramos hacer una búsqueda por fecha, por ejemplo, sí que debemos hacer un bucle para buscar.

    Esto me ha recordado cuando hace unos 12 años, en mi web utilizaba ficheros de texto con separadores para almacenar información (cuando mi servicio de hosting me cobraba por utilizar bases de datos MySQL). Bueno, son ficheros de texto, estaba todo el rato leyéndolos, y algunos llegaron a ser de varios Mb. Aunque la página cuando llegó a tener unas 5000 visitas diarias, empezaba a romperse, ya que en algunas franjas horarias las búsquedas empezaron a ser eternas (tampoco estaba usando ningún tipo de caché). Todo puede funcionar bien hasta que llegan miles de usuarios y te rompen la página 🙂

  2. Hola Gaspar.

    Gracias por el comentario y por tu anécdota.

    Un tuit que he escrito sobre este post:

    “Siguiendo las instrucciones todo el mundo puede cocinar una paella. Pero una cosa es que sea comestible y otra es que sea vomitiva”.

    Nadie pagaría por una paella vomitiva, pero sí que hay mucha gente que paga por un código vomitivo (espero que sea porque no es consciente de ello).

    Un saludo.

  3. Lo del bucle, imperdonable, y más siendo un estudiante de tercer curso. Lo del legend, me parece menos grave, aunque no deja de ser un error semántico de uso de la etiqueta.

    Aunque en disculpa del alumno, igual está siguiendo la máxima de ‘Si funciona, no lo toques…’ 🙂

    Por cierto, el simil de la paella es muy bueno, cuantas paellas nos habrá tocado recocinar, endulzar, o salar por 4 duros… 🙁

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.