Variable (Informatik)

Im Computerprogrammierung, a Variable ist ein abstrakter Speicherort gepaart mit einem zugehörigen Symbolischer Name, die einige bekannte oder unbekannte Anzahl von Informationen enthält, die als als bezeichnet bezeichnet werden Wert; oder einfacher ist eine Variable ein benannter Container für einen bestimmten Satz von Bits oder eine Art von Daten (wie Ganzzahl, Float, String usw.). Eine Variable kann schließlich mit a zugeordnet oder identifiziert werden Speicheradresse. Der variable Name ist der übliche Weg zu Hinweis Der gespeicherte Wert, zusätzlich zur Variablen selbst, abhängig vom Kontext. Diese Trennung von Namen und Inhalt ermöglicht es, dass der Name unabhängig von den genauen Informationen verwendet wird, die er darstellt. Die Kennung im Computer Quellcode kann sein gebunden zu einem Wert während Laufzeitund der Wert der Variablen kann sich somit im Verlauf von ändern Programmausführung.[1][2][3][4]

Variablen in der Programmierung entsprechen möglicherweise nicht direkt dem Konzept von Variablen in Mathematik. Letzteres ist abstraktohne Bezug auf ein physisches Objekt wie den Speicherort. Der Wert einer Computervariablen ist nicht unbedingt Teil eines Gleichung oder Formel wie in Mathematik. Variablen in der Computerprogrammierung werden häufig lange Namen angegeben, um ihre Verwendung relativ beschreibend zu machen, während Variablen in der Mathematik häufig knapp, ein- oder zwei-Charakter-Namen für die Kürze in Transkription und Manipulation aufweisen.

Der Speicherort einer Variablen kann durch verschiedene Identifikatoren verwiesen werden, eine Situation, die als bekannt ist Aliasing. Das Zuweisen eines Wertes der Variablen mithilfe eines der Kennungen ändert den Wert, auf den durch die anderen Kennungen zugegriffen werden können.

Compiler müssen die symbolischen Namen der Variablen durch die tatsächlichen Stellen der Daten ersetzen. Während der Name, der Typ und der Ort einer Variablen häufig behoben bleiben, können die am Standort gespeicherten Daten während der Programmausführung geändert werden.

Aktionen auf eine Variable

Im Imperativ Programmiersprachen, Werte können im Allgemeinen sein Zugriff oder geändert jederzeit. Im rein funktional und Logiksprachen, Variablen sind gebunden Ausdrücke und einen einzigen Wert während ihres gesamten Werts zu behalten Lebensdauer aufgrund der Anforderungen von Referenztransparenz. In imperativen Sprachen wird das gleiche Verhalten von (benannt) gezeigt Konstanten (symbolische Konstanten), die typischerweise mit (normalen) Variablen kontrastiert werden.

Abhängig von Typ System einer Programmiersprache können Variablen möglicherweise nur eine angegebene speichern Datentyp (z.B. ganze Zahl oder Saite). Alternativ kann ein Datentyp nur mit dem aktuellen Wert zugeordnet sein, sodass eine einzelne Variable alles speichern kann, was von der Programmiersprache unterstützt wird.

Variablen sind die Behälter zum Speichern der Werte.

Variablen und Umfang:

  • Automatische Variablen: Jede lokale Variable in einer Funktion entsteht nur dann, wenn die Funktion aufgerufen wird, und verschwindet, wenn die Funktion verlassen wird. Solche Variablen werden als automatische Variablen bezeichnet.
  • Externe Variablen: Dies sind Variablen, die extern zu einer Funktion sind und mit Namen mit jeder Funktion zugegriffen werden können. Diese Variablen existieren dauerhaft; Vielmehr, dass sie ihre Werte behalten, auch nachdem die festgelegten Funktionen, die sie festgelegt haben, zurückgegeben werden und verweilen, und das Verschwinden zu erscheint.

Identifikatoren, die auf eine Variable hinweisen

Ein Bezeichner, der auf eine Variable verweist Attribute der Variablen, wie z. B. Zugangserlaubnis, Schlösser, Semaphoren, etc.

Beispielsweise kann eine Variable durch die Kennung verwiesen werden "total_count"Und die Variable kann die Zahl 1956 enthalten. Wenn die gleiche Variable durch die Kennung verwiesen wird"r"Auch und wenn diese Kennung verwendet", "r"Der Wert der Variablen wird auf 2009 geändert und dann den Wert mit der Kennung liest"total_count"wird ein Ergebnis von 2009 und nicht 1956 liefern.

Wenn eine Variable nur durch eine einzelne Kennung verwiesen wird, kann diese Kennung einfach aufgerufen werden der Name der Variablen; Ansonsten können wir davon sprechen als Einer der Namen der Variablen. Zum Beispiel im vorherigen Beispiel die Kennung "total_count"Ist ein Name der fraglichen Variablen und"r"Ist ein anderer Name derselben Variablen.

Umfang und Umfang

Das Umfang einer Variablen beschreibt, wo im Text eines Programms die Variable verwendet werden kann, während die Ausmaß (auch genannt Lebensdauer) einer Variablen beschreibt, wenn in der Ausführung eines Programms die Variable einen (aussagekräftigen) Wert hat. Der Umfang einer Variablen beeinflusst das Ausmaß. Der Umfang einer Variablen ist tatsächlich eine Eigenschaft des Namens der Variablen, und das Ausmaß ist eine Eigenschaft des Speicherorts der Variablen. Diese sollten nicht mit verwechselt werden Kontext (auch genannt Umgebung), die eine Eigenschaft des Programms ist und sich nach Punkt oder Ausführung des Programms unterscheidet - siehe Umfang: Ein Überblick. Des Weiteren, Objektlebensdauer Kann mit einer variablen Lebensdauer übereinstimmen, aber in vielen Fällen nicht daran gebunden.

Zielfernrohr ist ein wichtiger Teil der Namensauflösung einer Variablen. Die meisten Sprachen definieren eine spezifische Umfang Für jede Variable (sowie jede andere benannte Entität), die sich innerhalb eines bestimmten Programms unterscheiden kann. Der Umfang einer Variablen ist der Teil des Programms des Programms, für den der Name der Variablen eine Bedeutung hat und für die die Variable als "sichtbar" bezeichnet wird. Der Eintritt in diesen Umfang beginnt normalerweise die Lebensdauer einer Variablen (wie es in den Zusammenhang kommt) und beendet diesen Bereich typischerweise seine Lebensdauer (wenn er aus dem Kontext herausgeht). Zum Beispiel eine Variable mit "lexikalischer Bereich"ist nur innerhalb einer bestimmten Funktion aussagekräftig/Subroutineoder feiner innerhalb eines Ausdrucks/Aussagen (entsprechend mit Funktionsumfang oder Blockbereich); Dies ist eine statische Auflösung, die bei Parse Time oder Compile-Time eine leistungsfähige Auflösung ist. Alternativ eine Variable mit dynamischer Bereich wird zur Laufzeit aufgelöst, basierend auf einem globalen Bindungsstapel, der vom spezifischen Kontrollfluss abhängt. Variablen, die nur innerhalb einer bestimmten Funktionen zugänglich sind, werden bezeichnet. "Lokale Variablen". EIN "Globale Variable"oder einer mit unbestimmter Umfang kann überall im Programm überall erwähnt werden.

AusmaßAndererseits ist eine Laufzeit (dynamisch) Aspekt einer Variablen. Jeder Bindung einer Variablen zu einem Wert kann eine eigene haben Ausmaß zur Laufzeit. Das Ausmaß der Bindung ist der Teil der Ausführungszeit des Programms, in der die Variable weiterhin auf denselben Wert oder Speicherort bezieht. Ein laufendes Programm kann ein Vielfaches eingeben und ein bestimmtes Ausmaß eingeben, wie bei a Schließung.

Es sei denn, die Programmiersprache Funktionen Müllsammlung, eine Variable, deren Ausmaß dauerhaft ihren Umfang überdauert kann zu einem Speicherleck, wobei der für die Variablen zugewiesene Speicher niemals befreit werden kann, da die Variable, mit der sie für die Deallocationszwecke verweisen würde, nicht mehr zugänglich ist. Es kann jedoch zulässig sein, damit eine variable Bindung über seinen Umfang hinausgeht, wie es in LISP auftritt Schließungen und C Statische lokale Variablen; Wenn die Ausführung in den Bereich der Variablen zurückgeht, kann die Variable erneut verwendet werden. Eine Variable, deren Umfang beginnt, bevor ihr Ausmaß der Fall ist nicht initialisiert und hat oft einen undefinierten, willkürlichen Wert, wenn er aufgerufen wird (siehe Wild Zeiger), da es noch ausdrücklich einen bestimmten Wert erhalten hat. Eine Variable, deren Ausmaß endet, bevor ihr Bereich zu einem werden kann baumelnder Zeiger und als nicht initialisiert, seit sein Wert zerstört wurde. Variablen, die in den beiden vorherigen Fällen beschrieben werden aus dem Umfang oder ungebunden. In vielen Sprachen ist es ein Fehler, den Wert einer Variablen zu verwenden, wenn sie aus dem Umfang ist. In anderen Sprachen kann dies ergeben unvorhersehbare Ergebnisse. Eine solche Variable kann jedoch einen neuen Wert zugewiesen werden, der ihm ein neues Ausmaß ergibt.

Für die Raumeffizienz kann ein für eine Variablen benötigter Speicherraum nur dann zugewiesen werden, wenn die Variable zum ersten Mal verwendet und befreit wird, wenn sie nicht mehr benötigt wird. Eine Variable wird nur erforderlich, wenn sie im Bereich der Bereich ist, sodass die Lebensdauer der einzelnen Variablen beginnt, wenn sie in den Umfang eingeht, kann nicht verwendete Variablen Platz geben. Um einen solchen Raum zu verschwenden, warnen Compiler häufig Programmierer, wenn eine Variable deklariert, aber nicht verwendet wird.

Es wird als gute Programmierpraxis angesehen, um den Umfang der Variablen so eng wie möglich zu gestalten, so dass verschiedene Teile eines Programms nicht versehentlich miteinander interagieren, indem sie sich gegenseitig die Variablen ändern. Dies verhindert auch Aktion in der Ferne. Häufige Techniken dafür sind unterschiedliche Abschnitte eines Programms, die unterschiedlich verwendet werden Nennen Sie Räumeoder um individuelle Variablen "privat" durch beide zu machen Dynamischer variabler Scoping oder lexikalischer variabler Scoping.

Viele Programmiersprachen verwenden einen reservierten Wert (oft benannt Null oder Null) um eine ungültige oder nicht initialisierte Variable anzuzeigen.

Typisierung

Im statisch typisiert Sprachen wie gehen oder Ml, eine Variable hat auch a Typ, was bedeutet, dass nur bestimmte Arten von Werten darin gespeichert werden können. Zum Beispiel eine Variable vom Typ "ganze Zahl"Es ist verboten, Textwerte zu speichern.

Im dynamisch getippt Sprachen wie PythonDer Typ einer Variablen wird durch ihren Wert abgeleitet und kann sich je nach Wert ändern. Im Common LispBeide Situationen existieren gleichzeitig: Eine Variable erhält einen Typ (falls nicht deklariert, wird angenommen, dass es sich T, das Universelle Supertyp) was zur Kompilierzeit existiert. Werte haben auch Typen, die zur Laufzeit überprüft und abgefragt werden können.

Die Typisierung von Variablen erlaubt auch Polymorphismen zur Kompilierungszeit gelöst werden. Dies unterscheidet sich jedoch von dem Polymorphismus, der in objektorientierten Funktionsaufrufen verwendet wird (bezeichnet als als Virtuelle Funktionen in C ++), der den Anruf basierend auf dem Werttyp im Gegensatz zu den Supertypen auflöst, die Variable darf haben.

Variablen speichern häufig einfache Daten wie Ganzzahlen und wörtliche Zeichenfolgen, aber einige Programmiersprachen ermöglichen eine Variable, Werte anderer zu speichern Datentypen auch. Solche Sprachen können auch Funktionen ermöglichen Parametrische polymorph. Diese Funktionen arbeiten wie Variablen, um Daten mehrerer Typen darzustellen. Zum Beispiel eine Funktion namens namens length kann die Länge einer Liste bestimmen. So ein length Funktion kann parametrisch -polymorph sein, indem eine Typvariable in seine Einbeziehung aufgenommen wird Geben Sie Signatur einda die Anzahl der Elemente in der Liste unabhängig von den Typen der Elemente ist.

Parameter

Das formale Parameter (oder formelle Argumente) von Funktionen werden auch als Variablen bezeichnet. Zum Beispiel in diesem Python Codesegment,

>>> def Addtwo(x): ...   Rückkehr x + 2 ... >>> Addtwo(5) 7 

die Variable benannt x ist ein Parameter weil es einen Wert erhält, wenn die Funktion aufgerufen wird. Die Ganzzahl 5 ist die Streit was gibt x dessen Wert. In den meisten Sprachen haben Funktionsparameter einen lokalen Bereich. Diese spezifische Variable benannt x kann nur innerhalb der erwähnt werden addtwo Funktion (obwohl natürlich auch andere Funktionen auch Variablen aufweisen können x).

Speicherzuweisung

Die Besonderheiten der variablen Allokation und die Darstellung ihrer Werte variieren stark zwischen den Programmiersprachen als auch zwischen Implementierungen einer bestimmten Sprache. Viele Sprachimplementierungen liefern Raum für Lokale Variablen, dessen Ausmaß für einen einzelnen Funktionsaufruf auf dem dauert Rufen Sie Stack anund dessen Speicher automatisch zurückgefordert wird, wenn die Funktion zurückkehrt. Allgemeiner in NamebindungDer Name einer Variablen ist an die Adresse eines bestimmten Blocks (zusammenhängende Sequenz) von Bytes im Speicher gebunden, und Operationen auf der Variablen manipulieren diesen Block. Referenzierung ist häufiger für Variablen, deren Werte bei kompilierter Code große oder unbekannte Größen haben. Solche Variablen verweisen auf die Position des Wertes, anstatt den Wert selbst zu speichern, der aus einem Speicherpool genannt wird Haufen.

Gebundene Variablen haben Werte. Ein Wert ist jedoch eine Abstraktion, eine Idee; In der Implementierung wird ein Wert von einigen dargestellt Datenobjekt, was irgendwo im Computerspeicher gespeichert wird. Das Programm oder das Laufzeitumgebung, muss den Speicher für jedes Datenobjekt beiseite legen und, da der Speicher endlich ist, stellen Sie sicher, dass dieser Speicher zur Wiederverwendung ausgegeben wird, wenn das Objekt nicht mehr benötigt wird, um den Wert der Variablen darzustellen.

Aus dem Haufen zugewiesene Objekte müssen zurückerobert werden - insbesondere wenn die Objekte nicht mehr benötigt werden. In einem garbage gesammelt Sprache (wie z. C#, Java, Python, Golang und Lispeln), Die Laufzeitumgebung holt Objekte automatisch zurück, wenn sich noch nicht mehr auf sie verweisen kann. In nicht garmbaar gesammelten Sprachen, wie z. Cdas Programm (und der Programmierer) muss explizit zuweisen Erinnerung und später frei, um das Gedächtnis zurückzugewinnen. Das Versäumnis führt dazu Speicherlecks, in dem der Haufen beim Ausführen des Programms erschöpft ist, besteht ein eventueller Fehler durch den anstrengenden verfügbaren Speicher.

Wenn sich eine Variable auf a bezieht Datenstruktur Dynamisch erstellt, können einige seiner Komponenten nur indirekt über die Variable zugegriffen werden. Unter solchen Umständen müssen Müllsammler (oder analoge Programme in Sprachen, denen Müllsammler mangeln) mit einem Fall umgehen, in dem nur ein Teil des Speichers aus der Variablen zurückgefordert werden muss.

Regeln der Namensgebung

Im Gegensatz zu ihren mathematischen Gegenstücken nehmen Programmiervariablen und Konstanten üblicherweise Multiple-Charakter-Namen, z. COST oder total. Einzelcharakternamen werden am häufigsten nur für Hilfsvariablen verwendet. zum Beispiel, i, j, k zum Array -Index Variablen.

Einige Namenskonventionen werden auf Sprachebene als Teil der Sprachsyntax durchgesetzt, die das Format gültiger Kennungen beinhaltet. In fast allen Sprachen können Variablennamen nicht mit einer Ziffer (0–9) beginnen und keine Whitespace -Zeichen enthalten. Ob Interpunktionsmarken in variablen Namen zulässig sind oder nicht, variiert von Sprache zu Sprache; Viele Sprachen erlauben nur die unterstreichen ("_") in Variablennamen und verbieten Sie alle anderen Interpunktionen. In einigen Programmiersprachen, Sigils (Symbole oder Interpunktion) sind an variablen Kennungen befestigt, um den Datenatyp oder den Umfang der Variablen anzuzeigen.

Fallempfindlichkeit Variablen Namen variieren auch zwischen Sprachen und einigen Sprachen erfordern die Verwendung eines bestimmten Falls bei der Benennung bestimmter Entitäten.[Anmerkung 1] Die meisten modernen Sprachen sind fallempfindlich; Einige ältere Sprachen sind es nicht. Einige Sprachen reservieren bestimmte Formen von Variablennamen für ihre eigene interne Verwendung. In vielen Sprachen fallen Namen, die mit zwei Unterstrichen ("__") beginnen, oft unter diese Kategorie.

Abgesehen von den grundlegenden Einschränkungen, die durch eine Sprache auferlegt werden, ist die Benennung von Variablen weitgehend eine Frage des Stils. Bei der Maschinensprache Ebene, Variablennamen werden nicht verwendet, sodass die genauen Namen für den Computer keine Rolle spielen. Die Namen von Variablen identifizieren sie daher, für den Rest sind sie nur ein Werkzeug für Programmierer, um Programme zu schreiben und zu verstehen. Die Verwendung von schlecht ausgewählten Variablennamen kann den Code schwieriger zu überprüfen als nicht-entkriptive Namen erschweren, sodass die klaren Namen häufig gefördert werden.[5][6]

Programmierer erstellen und halten sich häufig an Code -Style -Richtlinien, die Leitlinien zur Benennung von Variablen bieten oder ein genaues Benennungsschema auferlegen. Kürzere Namen sind schneller zu tippen, aber weniger beschreibend; Längere Namen erleichtern häufig das Lesen und den Zweck von Variablen leichter zu verstehen. Extreme Ausführlichkeit in Variablennamen kann jedoch auch zu einem weniger verständlichen Code führen.

Variablentypen (basierend auf Lebensdauer)

Wir können Variablen basierend auf ihrer Lebensdauer klassifizieren. Die verschiedenen Arten von Variablen sind statische, stapeldynamische, explizite Haufen-Dynamische und implizite Heap-Dynamic. EIN Statische Variable ist auch als globale Variable bezeichnet, es ist an eine Speicherzelle gebunden, bevor die Ausführung beginnt und bleibt bis zur Beendigung derselben Speicherzelle. Ein typisches Beispiel sind die statischen Variablen in C und C ++. Eine stack-dynamische Variable wird als lokale Variable bezeichnet, die bei der Ausführung der Deklarationsanweisung gebunden ist, und sie wird bei Rückgabe des Verfahrens behandelt. Die Hauptbeispiele sind lokale Variablen in C -Unterprogrammen und Java -Methoden. Explizite heap-dynamische Variablen sind namenlose (abstrakte) Gedächtniszellen, die durch explizite Anweisungen für die Laufzeit zugewiesen und verkauft werden, die vom Programmierer angegeben sind. Die Hauptbeispiele sind dynamische Objekte in C ++ (über neue und lösche) und alle Objekte in Java. Implizite Heap-dynamische Variablen sind nur dann an den Haufen der Speicherspeicher gebunden, wenn ihnen Werte zugewiesen werden. Allokation und Freigabe treten auf, wenn die Werte zu Variablen zugewiesen werden. Infolgedessen weisen implizite heap-dynamische Variablen den höchsten Grad an Flexibilität auf. Die Hauptbeispiele sind einige Variablen in JavaScript, PHP und allen Variablen in APL.

Siehe auch

Anmerkungen

  1. ^ Zum Beispiel, Haskell erfordert, dass Namen von Typen mit einem Großbuchstaben beginnen.

Verweise

  1. ^ Compiler: Prinzipien, Techniken und Werkzeuge, S. 26–28
  2. ^ Knuth, Donald (1997). Die Kunst der Computerprogrammierung. Vol. 1 (3. Aufl.). Lesen, Massachusetts: Addison-Wesley. S. 3–4. ISBN 0-201-89683-4.
  3. ^ "Programmierung mit Variablen". Khan Akademie. Abgerufen 23. März 2020.
  4. ^ "Kratzer für angehende Codierer". Harvard. Abgerufen 23. März 2020.
  5. ^ Wie man keine Variablen auswählt, Abgerufen am 11. Juli 2012 [Dead Link]
  6. ^ Edsger Dijkstra, Zur Hölle mit "aussagekräftigen Kennern"!