Articulo de referencia

Etiqueta (informática)

En los lenguajes de programación , una etiqueta es una secuencia de caracteres que identifica una ubicación dentro del código fuente . En la mayoría de los lenguajes, las etique...

En los lenguajes de programación , una etiqueta es una secuencia de caracteres que identifica una ubicación dentro del código fuente . En la mayoría de los lenguajes, las etiquetas toman la forma de un identificador , a menudo seguido de un carácter de puntuación (por ejemplo, dos puntos ). En muchos lenguajes de alto nivel , el propósito de una etiqueta es actuar como destino de una GOTOinstrucción. [ 1 ] [ 2 ] En lenguaje ensamblador , las etiquetas se pueden usar en cualquier lugar donde se pueda usar una dirección (por ejemplo, como operando de una instrucción JMPo ). [ 3 ] También en Pascal y sus variaciones derivadas. Algunos lenguajes, como Fortran y BASIC , admiten etiquetas numéricas. [ 4 ] Las etiquetas también se utilizan para identificar un punto de entrada en una secuencia compilada de instrucciones (por ejemplo, durante la depuración ).MOV

do

En C , una etiqueta identifica una instrucción en el código. Una misma instrucción puede tener varias etiquetas. Las etiquetas simplemente indican ubicaciones en el código y alcanzar una etiqueta no afecta la ejecución real.

Etiquetas de función

Las etiquetas de función constan de un identificador seguido de dos puntos. Cada etiqueta apunta a una instrucción dentro de una función, y su identificador debe ser único dentro de esa función. Otras funciones pueden usar el mismo nombre para una etiqueta. Los identificadores de etiqueta ocupan su propio espacio de nombres; es posible tener variables y funciones con el mismo nombre que una etiqueta.

void foo ( int number ) { if ( number < 0 ) goto error ; bar ( number ); return ; error : fprintf ( stderr , "¡Número inválido! \n " ); }

Aquí, error es la etiqueta. La instrucción goto se puede usar para saltar a una instrucción etiquetada en el código. Después de un salto goto, la ejecución del programa continúa con la instrucción que sigue a la etiqueta.

Etiquetas de interruptor

En una instrucción switch se pueden usar dos tipos de etiquetas. Una etiqueta case consiste en la palabra clave case, seguida de una expresión que se evalúa como una constante entera. Una etiqueta default consiste en la palabra clave default. Las etiquetas case se usan para asociar un valor entero con una instrucción en el código. Cuando se llega a una instrucción switch, la ejecución del programa continúa con la instrucción que sigue a la etiqueta case con el valor que coincide con el valor entre paréntesis de la instrucción switch. Si no hay ninguna etiqueta case, pero hay una etiqueta default, la ejecución del programa continúa con la instrucción que sigue a la etiqueta default. Si no hay ninguna etiqueta default, la ejecución del programa continúa después de la instrucción switch.

switch ( die ) { default : printf ( "inválido \n " ); break ;caso 1 : caso 3 : caso 5 : printf ( "impar \n " ); break ;caso 2 : caso 4 : caso 6 : printf ( "even \n " ); break ; }

Dentro de una única instrucción switch , la constante entera asociada a cada etiqueta case debe ser única. Puede haber o no una instrucción default. No existe ninguna restricción en el orden de las etiquetas dentro de una instrucción switch. El requisito de que los valores de las etiquetas case se evalúen como constantes enteras le brinda al compilador más margen para optimizaciones.

Ejemplos

JavaScript

En la sintaxis del lenguaje JavaScript, las declaraciones pueden ir precedidas de la etiqueta:

arriba : //Etiqueta el bucle for más externo. for ( var i = 0 ; i < 4 ; i ++ ) { for ( var j = 0 ; j < 4 ; j ++ ) { if ( j === 3 && i === 2 ) { alert ( "i=" + i + ", j=" + j ); //i=2, j=3 break top ; } } }alerta ( "i=" + i + ", j=" + j ); //i=2, j=3

It also possible to use break statement to break out of the code blocks:

top:{console.log("foo")console.log("bar")breaktopconsole.log("baz")}// Which would output: // > foo// > bar

Common Lisp

In Common Lisp two ways of defining labels exist. The first one involves the tagbody special operator. Distinguishing its usage from many other programming languages that permit global navigation, such as C, the labels are only accessible in the context of this operator. Inside of a tagbody labels are defined as forms starting with a symbol; the go special form permits a transfer of control between these labels.[5]

(let((iterationNIL))(tagbodystart(print'started)(setfiteration0)increase(printiteration)(incfiteration1)(gocheck)check(if(>=iteration10)(goend)(goincrease))end(print'done)))

A second method utilizes the reader macros #n= and #n#, the former of which labels the object immediately following it, the latter refers to its evaluated value.[6] Labels in this sense constitute rather an alternative to variables, with #n= declaring and initializing a “variable” and #n# accessing it. The placeholder n designates a chosen unsigned decimal integer identifying the label.

(progn#1="hello"(print#1#))

Apart from that, some forms permit or mandate the declaration of a label for later referral, including the special form block which prescribes a naming, and the loop macro that can be identified by a named clause. Immediate departure from a named form is possible by using the return-from special operator.

( bloque myblock ( bucle para iteración desde 0 hacer ( si ( >= iteración 10 ) ( regresar desde myblock 'hecho ) ( imprimir iteración ))))
( bucle llamado myloop para iteración desde 0 hacer ( si ( >= iteración 10 ) ( retornar-desde myloop 'hecho ) ( imprimir iteración )))

De manera similar a C, las macros case, ccase, ecase, [ 7 ]typecase , ctypecasey etypecasedefinen sentencias switch. [ 8 ]

( let (( my-value 5 )) ( case my-value ( 1 ( print "uno" )) ( 2 ( print "dos" )) (( 3 4 5 ) ( print "tres cuatro o cinco" )) ( otherwise ( print "cualquier otro valor" ))))
( let (( my-value 5 )) ( typecase my-value ( list ( print "una lista" )) ( string ( print "una cadena" )) ( number ( print "un número" )) ( otherwise ( print "cualquier otro tipo" ))))

Véase también

Referencias

  1. "Sección 6.8.6.1 del estándar C: La instrucción goto" . Archivado del original el 24 de diciembre de 2007. Consultado el 3 de julio de 2008 .
  2. "GOTO Statement QuickSCREEN" . Microsoft. 1988. Archivado del original el 25/07/2009 . Consultado el 03/07/2008 .
  3. O. Lawlor. "nasm x86 Assembly" . Consultado el 3 de julio de 2008 .
  4. "Diferencias entre GW-BASIC y QBasic" . Archivado del original el 10 de febrero de 2010.
  5. Kent Pitman. "CLHS: Operador especial TAGBODY" . Consultado el 18 de agosto de 2020 .
  6. Kent Pitman. "CLHS: Sección 2.4.8" . Consultado el 18 de agosto de 2020 .
  7. Kent Pitman. "CLHS: Macro CASE, CCASE, ECASE" . Consultado el 20 de agosto de 2020 .
  8. Kent Pitman. "CLSH: Macro TYPECASE, CTYPECASE, ETYPECASE" . Consultado el 20 de agosto de 2020 .