Una variable metasintáctica es una palabra específica o un conjunto de palabras identificadas como un marcador de posición en la ciencia informática y, específicamente, en la programación informática . Estas palabras se encuentran comúnmente en el código fuente y están destinadas a ser modificadas o sustituidas antes de su uso en el mundo real. Por ejemplo, foo y bar se utilizan en más de 330 solicitudes de comentarios del Grupo de trabajo de ingeniería de Internet , los documentos que definen tecnologías fundamentales de Internet como HTTP (web), TCP/IP y protocolos de correo electrónico . [1] [2]
Por analogía matemática , una variable metasintáctica es una palabra que es una variable para otras palabras, tal como en álgebra las letras se utilizan como variables para los números . [1]
Las variables metasintácticas se utilizan para nombrar entidades como variables, funciones y comandos cuya identidad exacta no es importante y sólo sirven para demostrar un concepto, lo cual es útil para enseñar programación.
Dado que el inglés es el idioma base o lengua franca de la mayoría de los lenguajes de programación informática, las variables que se originan en inglés se ven comúnmente incluso en programas y ejemplos de programas escritos para audiencias de otros idiomas hablados.
Las variables utilizadas en un contexto particular pueden depender de las subculturas que se desarrollan en torno a los lenguajes de programación .
Las variables metasintácticas que se usan comúnmente en todos los lenguajes de programación incluyen foobar , foo , bar , baz , qux , quux , corge , grault , garply , waldo , fred , plugh , xyzzy y thud . [1] [3] Dos de estas palabras, plugh y xyzzy , están tomadas del juego Colossal Cave Adventure . [4]
Se puede encontrar una referencia más completa en The Hacker's Dictionary de MIT Press .
En japonés, las palabras hoge (ほげ) [5] y fuga (ふが) se usan comúnmente, mientras que otras palabras y variantes comunes son piyo (ぴよ), hogera (ほげら) y hogehoge (ほげほげ). [6] [ referencia circular ] Se desconoce el origen de hoge como variable metasintáctica, pero se cree que data de principios de la década de 1980. [6]
En Francia, la palabra toto se usa ampliamente, con variantes como tata , titi y tutu . Una fuente común para el uso de toto es una referencia al personaje típico que se usa para contar chistes con Tête à Toto . [ cita requerida ]
En Turquía, las palabras hede y hödö (que normalmente se escriben hodo debido a las restricciones de nombres de los lenguajes de programación, que solo usan ASCII ) son variables metasintácticas bien conocidas que provienen de revistas de dibujos animados populares de los años 90, como LeMan. Las palabras no significan nada y se usan precisamente por esa razón. Los términos se popularizaron más ampliamente gracias al actor y comediante Cem Yılmaz a fines de los años 90 y principios de los 2000. [7]
En la cultura de programación de software italiana, es común encontrar nombres de personajes de Walt Disney (como los que aparecen en las versiones italianas de los programas) que se utilizan como variables. Estos nombres suelen aparecer en pseudocódigo, se mencionan en clases de ingeniería de software y se emplean habitualmente al explicar algoritmos a colegas. Entre los más utilizados se encuentran "pippo" (Goofy), "pluto" y "paperino" (el Pato Donald). [8]
En la cultura de programación de software alemana, es común encontrar el nombre personal Klaus como nombre provisional para una clase; suena similar a "Klasse", la palabra alemana para "clase". [ cita requerida ]
En el siguiente ejemplo, el nombre de la función foo
y el nombre de la variable bar
son variables metasintácticas. Las líneas que comienzan con //
son comentarios.
// La función llamada foo int foo ( void ) { // Declara la variable bar y establece el valor en 1 int bar = 1 ; barra de retorno ; }
Prototipos de funciones con ejemplos de diferentes mecanismos de paso de argumentos : [9]
void Foo ( Barra de frutas ); void Foo ( Fruta * barra ); void Foo ( const Fruta & barra );
Ejemplo que muestra las capacidades de sobrecarga de funciones del lenguaje C++
void Foo ( int barra ); void Foo ( int barra , int baz ); void Foo ( int barra , int baz , int qux ) ;
Spam , jamón y huevos son las principales variables metasintácticas utilizadas en el lenguaje de programación Python . [10] Esta es una referencia al famoso sketch cómico " Spam ", de Monty Python , el epónimo del lenguaje. [11]
En el siguiente ejemplo spam
, ham
y eggs
son variables metasintácticas y las líneas que comienzan con #
son comentarios.
# Define una función llamada spam def spam (): # Define la variable ham ham = "¡Hola mundo!" # Define la variable huevos huevos = 1 devolver
Tanto los RFC de la IETF como los lenguajes de programación informática se presentan en texto simple , lo que hace necesario distinguir las variables metasintácticas mediante una convención de nomenclatura, ya que no sería obvio a partir del contexto.
A continuación se muestra un ejemplo del documento oficial de la IETF que explica los protocolos de correo electrónico (de RFC 772, citado en RFC 3092):
Todo está bien, ahora se pueden especificar los destinatarios. S: MRCP PARA:<Foo@Y> <CRLF> R: 200 OK S: MRCP PARA:<Raboof@Y> <CRLF> R: 553 No existe ese usuario aquí S: MRCP PARA:<bar@Y> <CRLF> R: 200 OK S: MRCP PARA:<@Y,@X,fubar@Z> <CRLF> R: 200 OK Tenga en cuenta que la falla de "Raboof" no tiene efecto en el almacenamiento de correo para "Foo", "bar" o el correo que se reenviará a "fubar@Z" a través del host "X".
(La documentación de texinfo enfatiza la distinción entre metavariables y simples variables utilizadas en un lenguaje de programación, documentándose en algún archivo texinfo como: "Use el comando @var para indicar variables metasintácticas. Una variable metasintáctica es algo que representa otro fragmento de texto. Por ejemplo, debe usar una variable metasintáctica en la documentación de una función para describir los argumentos que se pasan a esa función. No use @var para los nombres de variables particulares en lenguajes de programación. Estos son nombres específicos de un programa, por lo que @code es correcto para ellos". [12] )
Otro punto que se refleja en el ejemplo anterior es la convención de que una metavariable debe sustituirse uniformemente por la misma instancia en todas sus apariciones en un esquema dado. Esto contrasta con los símbolos no terminales en las gramáticas formales , donde los no terminales a la derecha de una producción pueden sustituirse por instancias diferentes. [13]
Es habitual utilizar el nombre ACME en bases de datos SQL de ejemplo y como nombre de empresa sustituto con fines didácticos. El término "base de datos ACME" se utiliza habitualmente para referirse a un conjunto de datos de base de datos de formación o de ejemplo que se utiliza únicamente con fines de formación o de prueba. ACME también se utiliza habitualmente en la documentación que muestra ejemplos de uso de SQL, una práctica habitual en muchos textos educativos, así como en la documentación técnica de empresas como Microsoft y Oracle . [14] [15] [16]