Siegel (Computerprogrammierung) - Sigil (computer programming)
In der Computerprogrammierung , eine Sigill ( / s ɪ dʒ əl / ) ist ein Symbol an einen befestigten variablen Namen, den Variablen zeigt Datentyp oder Umfang , in der Regel einen Präfix, wie in $foo , wobei $ das Siegel ist.
Sigil , vom lateinischen Sigillum , was "kleines Zeichen" bedeutet, bedeutet ein Zeichen oder Bild, das angeblich magische Kraft hat . Siegel können verwendet werden, um Namespaces mit unterschiedlichen Eigenschaften oder Verhaltensweisen zu trennen und abzugrenzen .
Historischer Zusammenhang
Die Verwendung von Siegeln wurde durch die Programmiersprache BASIC populär gemacht . Das bekannteste Beispiel für ein Siegel in BASIC ist das Dollarzeichen (" $ "), das an die Namen aller Zeichenfolgen angehängt wird . Viele BASIC-Dialekte verwenden andere Siegel (wie " % "), um Ganzzahlen und Gleitkommazahlen sowie deren Genauigkeit und manchmal auch andere Typen zu bezeichnen.
Larry Wall übernahm die Verwendung von Siegeln durch Shell Scripting für seine Perl-Programmiersprache . In Perl geben die Siegel keine feinkörnigen Datentypen wie Zeichenfolgen und Ganzzahlen an, sondern die allgemeineren Kategorien von Skalaren (mit einem Präfix " $ "), Arrays (mit " @ "), Hashes (mit " % ") und Unterprogrammen (mit " & "). Raku verwendet auch sekundäre Siegel oder Zweige , um den Umfang der Variablen anzugeben. Prominente Beispiele für Zweige in Raku sind " ^ ", die mit selbst deklarierten formalen Parametern ("Platzhaltervariablen") verwendet werden, und " . ", die mit Objektattribut-Accessoren (dh Instanzvariablen) verwendet werden.
In CLIPS wird skalaren Variablen ein ? Siegel " " vorangestellt, während Variablen mit mehreren Feldern (z. B. einer Liste mit einer Ebene) ein " " vorangestellt wird $? .
In Common Lisp sind spezielle Variablen (mit dynamischem Umfang) normalerweise von der * sogenannten " Ohrenschützer-Konvention " umgeben. Während dies nur eine Konvention ist und nicht durchgesetzt wird, übernimmt die Sprache selbst die Praxis (z. B. * Standardausgabe *). In ähnlicher Weise umgeben einige Programmierer Konstanten mit + .
In CycL wird Variablen ein " ? " Siegel vorangestellt . In ähnlicher Weise wird konstanten Namen " #$ " vorangestellt (ausgesprochen "Hash-Dollar").
In Elixir werden String-Siegel über das ~ Symbol " " bereitgestellt .
In MAPPER (auch bekannt als BIS) wird benannten Variablen das Präfix "<" und das Suffix ">" vorangestellt, da für Zeichenfolgen oder Zeichenwerte keine Anführungszeichen erforderlich sind.
Im mIRC-Skript haben Bezeichner ein " $ " Siegel, während allen Variablen ein " % " Präfix vorangestellt ist (unabhängig von lokalen oder globalen Variablen oder dem Datentyp). Binären Variablen wird ein " & " vorangestellt .
In der Programmiersprache MUMPS steht " $ " vor intrinsischen Funktionsnamen und "speziellen Variablennamen" (integrierten Variablen für den Zugriff auf den Ausführungsstatus). " $Z " steht vor nicht standardmäßigen intrinsischen Funktionsnamen. " $$ " steht vor extrinsischen Funktionsnamen. Routinen (für Prozeduren, Unterprogramme, Funktionen) und globalen Variablen (Datenbankspeicher) wird ein Caret (^) vorangestellt. Der letzte Teilbaum der globalen Variablen kann indirekt durch ein Caret und den letzten Index referenziert werden. Dies wird als "nackte Referenz" bezeichnet. Systemweiten Routinen und globalen Variablen (in bestimmten gemeinsam genutzten Datenbanken gespeichert) wird ^% vorangestellt. Diese werden als "Prozent Routinen" und "Prozent Globals" bezeichnet.
In Objective-C sind Zeichenfolgenliterale mit vorangestelltem " @ " Instanzen des Objekttyps NSString oder, seit clang v3.1 / LLVM v4.0 NSNumber , NSArray oder NSDictionary . Die präfixkomprimiert @ wird auch auf die Schlüsselwörter verwendet interface , implementation und end die Struktur der Klassendefinitionen zum Ausdruck bringen. Auch in Klassendeklarationen und -definitionen wird ein Präfix von - verwendet, um Elementmethoden und -variablen + anzugeben , während das Präfix Klassenelemente angibt.
In der PHP- Sprache, die weitgehend von Perl inspiriert wurde, steht " $ " vor jedem Variablennamen . Namen, denen dies nicht vorangestellt ist, gelten als Konstanten , Funktionen oder Klassennamen (oder Schnittstellen- oder Merkmalsnamen, die denselben Namespace wie Klassen haben).
PILOT verwendet " $ " für Puffer (Zeichenfolgenvariablen), " # " für ganzzahlige Variablen und " * " für Programmbezeichnungen.
Python verwendet einen „ @ “ Präfix, genannt pie Syntax für die Anwendung von Dekorateuren und einem „ __ “ Präfix, genannt dunder , für „private“ Attribute .
In Ruby fehlen gewöhnlichen Variablen Siegel, aber " $ " wird globalen Variablen vorangestellt , " @ " wird Instanzvariablen vorangestellt und " @@ " wird Klassenvariablen vorangestellt . Ruby verwendet auch (streng konventionelle) Suffix-Siegel: " ? " gibt eine Prädikatmethode an, die (normalerweise) einen booleschen Wert zurückgibt ; und " ! " zeigt an, dass die Methode möglicherweise einen unerwarteten Effekt hat und mit Vorsicht behandelt werden muss.
In Schema enden die Namen von Prozeduren, die immer einen booleschen Wert zurückgeben, normalerweise mit " ? ". Ebenso enden die Namen von Prozeduren, die Werte in Teilen zuvor zugeordneter Schemaobjekte (wie Paare, Vektoren oder Zeichenfolgen) speichern, normalerweise mit " ! ".
Standard ML verwendet das Präfix sigil " ' " für eine Variable, die sich auf einen Typ bezieht. Wenn das Siegel verdoppelt wird, bezieht es sich auf einen Typ, für den Gleichheit definiert ist. Das ' Zeichen " " kann auch innerhalb oder am Ende einer Variablen erscheinen. In diesem Fall hat es keine besondere Bedeutung.
In Transact-SQL steht " @ " vor einer lokalen Variablen oder einem Parameternamen. Systemvariablen (als globale Variablen bezeichnet) werden durch ein " @@ " Präfix unterschieden.
In Windows PowerShell , das teilweise von Unix-Shells und Perl inspiriert wurde , wird Variablennamen das $ Siegel " " vorangestellt .
In XSLT haben Variablen und Parameter bei der Verwendung ein führendes $ Siegel, obwohl das Siegel nicht enthalten ist , wenn es im <xsl:param> oder <xsl:variable> mit dem name Attribut " " definiert wird. In Bezug auf XSLT verwendet XQuery das $ Siegelformular sowohl in der Definition als auch in der Verwendung.
In MEL wird Variablennamen " $ " vorangestellt , um sie von Funktionen, Befehlen und anderen Bezeichnern zu unterscheiden.
Ähnliche Phänomene
Shell-Skriptvariablen
In Unix- Shell-Skripten und in Dienstprogrammen wie Makefiles ist " $ " ein unärer Operator, der den Namen einer Variablen in ihren Inhalt übersetzt. Dies scheint zwar einem Siegel ähnlich zu sein, ist jedoch ein unärer Operator für die lexikalische Indirektion , ähnlich dem * Dereferenzierungsoperator für Zeiger in C , was daran zu erkennen ist, dass das Dollarzeichen bei der Zuweisung zu einer Variablen weggelassen wird.
Bezeichnerkonventionen
In Fortran werden keine Siegel verwendet, aber alle Variablen, die mit den Buchstaben I, J, K, L, M und N beginnen, sind standardmäßig Ganzzahlen . In der Fortran-Dokumentation wird dies als "implizite Typisierung" bezeichnet, obwohl immer eine explizite Typisierung verfügbar ist, damit jede Variable mit einem beliebigen Typ deklariert werden kann. (Die Wahl des Bereichs I - N entspricht den traditionellen mathematischen Namenskonventionen .)
Verschiedene Programmiersprachen, einschließlich Prolog , Haskell , Ruby und Go, behandeln Bezeichner, die mit einem Großbuchstaben beginnen, anders als Bezeichner, die mit einem Kleinbuchstaben beginnen, eine Praxis, die sich auf die Verwendung von Siegeln bezieht.
Stropping
Die Verwendung vieler Sprachen in der .NET Common Language Infrastructure (CLI) von Microsoft ist eine Form des Stroppings und erfordert die Verwendung von Variablen in einer anderen Sprache, bei denen es sich möglicherweise um Schlüsselwörter in einer aufrufenden Sprache handelt. Dies geschieht manchmal durch Präfixe. In C # kann jedem Variablennamen " " vorangestellt werden . Dies wird hauptsächlich verwendet, um die Verwendung von Variablennamen zu ermöglichen, die andernfalls mit Schlüsselwörtern in Konflikt stehen würden. Dasselbe wird in VB.Net erreicht, indem der Name in eckige Klammern gesetzt wird, wie in .
@[end]
Das @ Präfix " " kann auch auf Zeichenfolgenliterale angewendet werden. siehe wörtliche Anhänge unten.
Ungarische Notation
Im Zusammenhang mit Siegeln steht die ungarische Notation , eine Namenskonvention für Variablen, die den Variablentyp durch Anhängen bestimmter alphabetischer Präfixe an den Variablennamen angibt. Im Gegensatz zu Sigils liefert die ungarische Notation dem Compiler jedoch keine Informationen. Daher müssen explizite Typen für die Variablen redundant angegeben werden (es sei denn, Sie verwenden eine Sprache mit Typinferenz ). Da die meisten Standard-Compiler die Verwendung der Präfixe nicht erzwingen, kann dies weggelassen werden, und der Code kann aufgrund einer versehentlichen fehlerhaften Verwendung verwirrt werden.
Wörtliche Anhänge
Während Siegel auf Namen (Bezeichner) angewendet werden, können ähnliche Präfixe und Suffixe auf Literale angewendet werden , insbesondere auf Ganzzahlliterale und Zeichenfolgenliterale , wobei entweder angegeben wird, wie das Literal ausgewertet werden soll oder welcher Datentyp es ist. Wird beispielsweise 0x10ULL in C ++ als vorzeichenlose lange lange Ganzzahl mit dem Wert 16 ausgewertet: Das 0x Präfix gibt hexadezimal an, während das Suffix ULL vorzeichenlose lange lange angibt. In ähnlicher Weise werden häufig Präfixe verwendet, um eine Rohzeichenfolge anzugeben , z. B. r"C:\Windows" in Python, die die Zeichenfolge mit Wert darstellt C:\Windows . als Escape-Zeichenfolge würde dies als geschrieben werden "C:\\Windows" .
Da dies eher die Semantik (Wert) eines Literals als die Syntax oder Semantik eines Bezeichners (Name) betrifft, handelt es sich weder um Stripping (Bezeichnersyntax) noch um ein Siegel (Bezeichnersemantik), aber es ist syntaktisch ähnlich.
Java-Anmerkungen
Vergleichen Sie Java-Anmerkungen wie @Override und @Deprecated.
Verwirrtheit
In einigen Fällen kann dieselbe Syntax für unterschiedliche Zwecke verwendet werden, was zu Verwirrung führen kann. Beispielsweise in C # , die „ @ kann“ Präfix verwendet werden , um entweder für fuchtig (damit reservierte Worte als Identifikatoren verwendet werden) oder als einen Präfix ein Literal (um einen angeben rohen String ); In diesem Fall ist keine Verwendung ein Siegel, da sie die Syntax von Bezeichnern oder die Semantik von Literalen beeinflusst, nicht die Semantik von Bezeichnern.