Here document

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Secuencia de comandos en Konsole de Linux (usando shell bash) para dar vida a una salida con heredoc.

Heredoc (conjunción apocópica de Here-document o Documento-aquí en español) es una forma de representar cadenas en los lenguajes de programación o shells de algún Sistema Operativo basado en Unix. Los lenguajes de programación que más se valen de este son PHP y Ruby. La diferencia entre Heredoc y otras formas más tradicionales de mandar cadenas de caracteres a la salida estándar es que con heredoc se pueden transmitir grandes cadenas de texto con poco esfuerzo; mientras que con instrucciones simples como printf() de C y echo() de PHP hay que mandar el texto línea por línea (con un formato a veces complejo en C), incluyendo comillas, especificaciones, punto y coma, el nombre de la instrucción y a veces especificaciones, por cada línea o fragmento de ella que se desee publicar, heredoc nos da la oportunidad de mostrar extensiones mayúsculas de párrafos con una sola instrucción o un solo procedimiento.

El texto (generalmente párrafos) creados con instrucciones heredoc incluyen y respetan la indentación, los espacios y caracteres de nueva línea del texto y otros atributos difíciles de incluir con texto simple, como las comillas dobles. Generalmente la sintaxis para programar una salida con heredoc es usando alguna instrucción seguida de <<, después un identificador para el texto, siguiendo con una línea nueva y el texto mismo y, finalmente, el cierre de la instrucción.

Shell en Linux[editar]

Con Bash podemos usar el comando tr para ejercitar heredoc:

  $ tr a-z A-Z <<IDENTIFICADOR
  > Hola a
  > todos, espero que
  > "se encuentren muy bien";
  > Saludos!!
  > IDENTIFICADOR

Incluyendo lo anterior, la salida devuelta sería:

  HOLA A
  TODOS, ESPERO QUE
  "SE ENCUENTREN MUY BIEN";
  SALUDOS!!

Y como se puede apreciar, la operación de incluir caracteres de nueva línea, comillas dobles, signos de admiración y punto y coma se vio trazada de manera sencilla.

PHP[editar]

Desde su versión 4.0, PHP permite el uso de heredoc en los documentos como implementación a la instrucción echo(); el formato es el siguiente:

  <?php
  echo   <<<EOT
  con este modo de uso de la función echo podemos
  escribir texto en
  varias líneas...
  
  o varios párrafos si se desea
  "incluyendo elementos tales como 'coma', 'punto y coma',
  'comillas dobles' y lo que es mejor:
  permite la conjugación de $VARIABLES.
  
  Adecuado para citas textuales grandes,
versos o lotes de código en HTML.
EOT; ?>

Sobra decir que la salida estándar será ese párrafo pero con el texto "" (sin texto) en sustitución a $VARIABLES a menos que tenga un valor asignado. EOT resulta ser el identificador (ID) del párrafo y se debe indicar en una nueva línea al final y con un punto y coma que indicará el final del lote de texto.

Ruby[editar]

El siguiente código es una implementación de heredoc en Ruby

  puts <<LISTA_DEL_SUPER
  
  Lista del supermercado
   ------------
  1. Pan*
  2. Huevos*
  3. Frutas*
  4. Trigo
  5. Jugo
  
  * Ración doble
  LISTA_DEL_SUPER

Lo que, guardado con el nombre pertinente, generará esto en la salida estándar:

  $ ruby grocery-list.rb
  Lista del supermercado
  ------------
  1. Pan*
  2. Huevos*
  3. Frutas*
  4. Trigo
  5. Jugo
  
  * Ración doble

Notas finales[editar]

Heredoc brinda muchas facilidades a los programadores cuando se trata de escribir líneas de texto extensas, sin embargo y pese a que provee cierta fidelidad al momento de plasmar el texto, no es muy usado por la gran mayoría de los programadores, puesto que la necesidad de incluir el carácter n como nueva línea lo hace poco portable en Windows, quien usa la combinación CRLF al presionar la tecla intro. Además es poco confiable si se trata de mostrar grandes textos al público puesto que un error en la sintaxis o en los identificadores podría hacer que no se muestre.

En PHP es mejor incluir el texto en HTML puro para evitar posibles conflictos y defectos de indentación o legibilidad, además, hablando en un sentido general, el mostrar cadenas de texto largas en un portal dinámico (de los que abundan en la Web 2.0) es mejor extraerlos de archivos o bases de datos y confiarlo a las variables; es cierto que a veces simplemente se requiere de párrafos cortos y fijos, para eso está heredoc, pero su uso debe ser con moderación.