Štítek (informatika) - Label (computer science)

Štítek v programovacím jazyce je posloupnost znaků, která identifikuje umístění ve zdrojovém kódu . Ve většině jazyků mají štítky podobu identifikátoru , za kterým často následuje interpunkční znak (např. Dvojtečka ). V mnoha programovacích jazycích na vysoké úrovni má štítek sloužit jako cíl GOTO příkazu. V assembleru lze popisky použít kdekoli, kde může adresa (například jako operand JMP nebo MOV instrukce). Také v Pascalu a jeho odvozených variantách. Některé jazyky, například Fortran a BASIC , podporují číselné štítky. Štítky se také používají k identifikaci vstupního bodu do kompilované posloupnosti příkazů (např. Během ladění ).

C

V C štítek identifikuje prohlášení v kódu. Jeden výpis může mít více štítků. Štítky pouze označují umístění v kódu a dosažení štítku nemá žádný vliv na skutečné provedení.

Štítky funkcí

Popisky funkcí se skládají z identifikátoru následovaného dvojtečkou. Každý takový štítek odkazuje na příkaz ve funkci a jeho identifikátor musí být v rámci této funkce jedinečný. Stejný název štítku mohou používat i jiné funkce. Identifikátory štítků zabírají svůj vlastní jmenný prostor - jeden může mít proměnné a funkce se stejným názvem jako štítek.

void foo(int number)
{
    if (number < 0)
        goto error;
    bar(number);
    return;
error:
    fprintf(stderr, "Invalid number!\n");
}

Zde je chyba štítek. Příkaz goto lze použít k přeskočení na popisovaný příkaz v kódu. Po a goto pokračuje provádění programu s příkazem za štítkem.

Přepnout štítky

Do příkazu switch lze vložit dva typy štítků. Popisek případu se skládá z klíčového slova case , následovaného výrazem, který je vyhodnocen jako celočíselná konstanta. Výchozí štítek se skládá z klíčového slova default . Štítky případů se používají k přidružení celočíselné hodnoty k příkazu v kódu. Když je dosaženo příkazu switch, provádění programu pokračuje příkazem za popiskem případu s hodnotou, která odpovídá hodnotě v závorkách přepínače. Pokud neexistuje žádný takový popisek případu, ale existuje výchozí popisek, provádění programu pokračuje s příkazem za výchozím popiskem. Pokud neexistuje žádný výchozí štítek, po přepnutí pokračuje provádění programu.

switch (die)
{
default:
    printf("invalid\n");
    break;

case 1:
case 3:
case 5:
    printf("odd\n");
    break;

case 2:
case 4:
case 6:
    printf("even\n");
    break;
}

V rámci jednoho příkazu switch musí být celočíselná konstanta spojená s každým popisem případu jedinečná. Výchozí prohlášení může, ale nemusí existovat. Pořadí štítků v přepínači není nijak omezeno. Požadavek, aby byly hodnoty popisků hodnot vyhodnoceny na celočíselné konstanty, dává kompilátoru více prostoru pro optimalizaci.

Příklady

Javascript

V jazyce JavaScriptu může před příkazy syntaxe následovat štítek:

top: //Label the outermost for-loop.
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;
        }
    }
}

alert("i=" + i + ", j=" + j); //i=2, j=3

Je také možné použít break příkaz k vylomení bloků kódu:

top: {
  console.log("foo")
  console.log("bar")
  break top
  console.log("baz")

}
// Which would output: 
// > foo
// > bar

Společný Lisp

V programu Common Lisp existují dva způsoby definování štítků. První zahrnuje tagbody speciální operátor. Odlišujíc jeho použití od mnoha jiných programovacích jazyků, které umožňují globální navigaci, například C , jsou štítky přístupné pouze v kontextu tohoto operátoru. Uvnitř tagbody štítků jsou definovány jako formuláře začínající symbolem; go zvláštní forma umožňuje předání řízení mezi těmito značkami.

(let ((iteration NIL))
  (tagbody
    start
      (print 'started)
      (setf  iteration 0)
    increase
      (print iteration)
      (incf  iteration 1)
      (go    check)
    check
      (if (>= iteration 10)
        (go end)
        (go increase))
    end
      (print 'done)))

Druhá metoda využívá makra čtečky a první z nich označuje objekt, který bezprostředně následuje, druhá odkazuje na jeho vyhodnocenou hodnotu. Štítky v tomto smyslu představují spíše alternativu k proměnným, přičemž deklarují a inicializují „proměnnou“ a přistupují k ní. Zástupný symbol n označuje vybrané celé číslo bez znaménka, které identifikuje štítek. #n=#n##n=#n#

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

Kromě toho některé formuláře povolují nebo pověřují deklaraci štítku pro pozdější použití, včetně zvláštního formuláře, block který předepisuje pojmenování, a loop makra, které lze identifikovat named klauzulí. Okamžitý odchod z pojmenovaného formuláře je možný pomocí return-from speciálního operátora.

(block myblock
  (loop for iteration from 0 do
    (if (>= iteration 10)
      (return-from myblock 'done)
      (print iteration))))
(loop
  named myloop
  for   iteration from 0
  do    (if (>= iteration 10)
          (return-from myloop 'done)
          (print iteration)))

V módě podobné C, makra case , ccase , ecase , typecase , ctypecase a etypecase definovat příkazy spínačů.

(let ((my-value 5))
  (case my-value
    (1         (print "one"))
    (2         (print "two"))
    ((3 4 5)   (print "three four or five"))
    (otherwise (print "any other value"))))
(let ((my-value 5))
  (typecase my-value
    (list      (print "a list"))
    (string    (print "a string"))
    (number    (print "a number"))
    (otherwise (print "any other type"))))

Viz také

Reference