www.wikidata.de-de.nina.az
In der Programmierung ist eine Variable ein abstrakter Behalter fur einen Wert der bei der Ausfuhrung eines Computerprogramms auftritt Im Normalfall wird eine Variable im Quelltext durch einen Namen bezeichnet und hat eine Adresse im Speicher des Computers Der durch eine Variable reprasentierte Wert und gegebenenfalls auch die Grosse kann im Unterschied zu einer Konstante zur Laufzeit des Rechenprozesses verandert werden Inhaltsverzeichnis 1 Arten von Variablen 2 Verwendung von Variablen 3 Sichtweisen von Variablen 3 1 L Wert und R Wert von Variablen 3 2 Variablen als Parameter von Funktionen 4 Typen von Variablen 5 Variablen in einer Blockstruktur 5 1 Sichtbarkeitsbereich von Variablen Scope 5 1 1 Beispiel lexikalisch im Gegensatz zu dynamisch 5 2 Lebensdauer von Variablen 5 3 Speicherzuweisung 6 Namenswahl 7 Initialisierung 8 Siehe auch 9 Weblinks 10 EinzelnachweiseArten von Variablen BearbeitenGrundsatzlich unterscheidet man zwischen Wertevariablen und referenziellen Variablen In einer Wertevariablen wird ein Wert direkt abgelegt wahrend eine referenzielle Variable als Wert die Speicheradresse des eigentlichen Wertes einer Funktion oder eines Objektes enthalt Deshalb werden referenzielle Variablen auch als Zeiger bezeichnet Beispiele in der Programmiersprache C const int i 3 Konstante keine Variable int j 3 Wertevariable object k object 3 referenzielle Variable auf einen Wert object o new object referenzielle Variable auf ein Objekt object n null referenzielle Variable auf das null Objekt Zeiger auf Speicheradresse 0 Func lt int gt f gt 3 referenzielle Variable auf eine FunktionVerwendung von Variablen BearbeitenEs lassen sich verschiedene Arten der Verwendung von Variablen unterscheiden Eingabevariablen erhalten Werte die von aussen ins Programm die Funktion oder Methode eingegeben werden siehe Parameter Ausgabevariablen enthalten spater die Resultate der Rechnung Referenzvariablen Zeiger dienen sowohl als Eingangs als auch Ausgangsvariable Der Wert kann wahrend der Rechnung verandert werden Hilfsvariablen nehmen Werte auf die im Verlauf der Rechnung benotigt werden Umgebungsvariablen reprasentieren die ausseren Randbedingungen eines Programms Metasyntaktische Variablen dienen zur blossen Benennung von Entitaten oder Teilabschnitten des Programmcodes Laufzeitvariablen 1 Sichtweisen von Variablen BearbeitenDas Konzept der Variablen wird von Programmiersprachen unterschiedlich interpretiert in einer rein funktionalen Programmiersprache sind Variablen einfach nur Bezeichner das heisst sie werden wie im Lambda Kalkul nur dazu verwendet die Eingabeparameter fur eine Funktion zu bezeichnen Wahrend der Berechnung eines Funktionswerts andert sich der Wert der Variablen deshalb nicht Ein Ausdruck mit Variablen hat stets den gleichen Wert unabhangig davon an welcher Stelle im Programm er auftritt Diese Eigenschaft ist unter dem Begriff referentielle Transparenz bekannt in einer imperativen Programmiersprache kann sich dagegen der Wert einer Variablen wahrend des Programmablaufs andern Der gleiche Ausdruck mit Variablen kann deshalb an verschiedenen Stellen des Programms oder zu verschiedenen Zeiten in der Programmausfuhrung ganz unterschiedliche Werte haben Dementsprechend definieren verschiedene Programmiersprachen den Begriff der Variablen ganz unterschiedlich Im Fall von Java heisst es Eine Variable ist ein Speicherplatz 2 In der Sprachdefinition von Scheme heisst es dagegen Scheme erlaubt es dass Bezeichner fur Speicherplatze stehen die Werte enthalten Solche Bezeichner heissen Variablen 3 Allgemein mussen fur eine Variable in einer imperativen Programmiersprache vier Aspekte unterschieden werden der Speicherplatz selbst als Behaltnis fur Daten die in dem Speicherplatz abgelegten Daten die Adresse des Speicherplatzes und der Bezeichner unter dem der Speicherplatz angesprochen werden kann Kompliziert wird die Situation ausserdem dadurch dass unter einem bestimmten Bezeichner an verschiedenen Stellen des Programms oder zu verschiedenen Zeiten in der Programmausfuhrung unterschiedliche Speicherplatze angesprochen sein konnen und dass es auch anonyme also namenlose Variablen gibt L Wert und R Wert von Variablen Bearbeiten Typisch fur imperative Programmiersprachen ist dass ein Bezeichner auf der linken Seite einer Wertzuweisung eine andere Bedeutung L Wert hat als auf ihrer rechten Seite R Wert Die Anweisung x x 1 bedeutet Nimm den Wert der Variablen mit dem Namen x erhohe ihn um eins und speichere dies an die Adresse von x Der L Wert einer Variablen ist also ihre Adresse der R Wert ihr Inhalt Variablen als Parameter von Funktionen Bearbeiten Auch die Parameter einer Funktion werden in deren Deklaration durch Variablen reprasentiert die dann formale Parameter heissen Beim Aufruf der Funktion werden den formalen Parametern dann Ausdrucke als tatsachlicher Parameter zugeordnet Fur die Ubergabe der tatsachlichen Parameter an die Funktion gibt es unterschiedliche Mechanismen Verbreitet sind die Ubergabe durch Wert und die Ubergabe durch Referenz Typen von Variablen BearbeitenMit jeder Variablen in einem Programm ist notwendigerweise ein bestimmter Datentyp kurz Typ verbunden Dies ist schon allein deshalb notwendig weil nur der Datentyp festlegt welche Operationen auf und mit der Variablen sinnvoll und zulassig sind Der Datentyp einer Variablen kann auch die Speichergrosse der Variablen festlegen In der Regel hat der Programmierer die Moglichkeit in einer Deklaration diesen Typ festzulegen In vielen Programmiersprachen ist eine solche explizite Deklaration sogar verpflichtend Andere Programmiersprachen bieten implizite Deklarationen die dann verwendet werden wenn keine expliziten Deklarationen vorhanden sind So kannte Fortran die Konvention dass Variablen deren Namen mit Buchstaben zwischen I und N beginnen vom Typ INTEGER sind und alle anderen vom Typ REAL sofern nichts anderes festgelegt wird Andere Programmiersprachen kennen sogenannte latente Typen Hier sind Deklarationen nicht notig sondern die Maschine erkennt den Typ einer Variablen bei ihrer ersten Verwendung an ihrem Inhalt und fuhrt diesen Typ dann stillschweigend weiter mit In manchen Programmiersprachen kann der nicht explizit angegebene Typ einer Variablen unter gewissen Voraussetzungen auch vom Compiler mittels Typinferenz anhand anderer Typen mit denen die Variable in einem Zusammenhang steht erschlossen werden In dynamisch typisierten Programmiersprachen kann sich der Typ einer Variablen erst zur Laufzeit eines Programmes ergeben und auch wahrend der Programmausfuhrung andern Folgendes Beispiel in JavaScript illustriert dies function show value if typeof value number value ist eine Zahl console log value show Hallo Welt show 42 Variablen in einer Blockstruktur BearbeitenEin wichtiges Konzept von Programmiersprachen ist das Unterprogramm ob es nun Prozedur Funktion Methode oder noch anders heisst Die allgemeinste Form dieses Konzepts ist der in der Programmiersprache Algol 60 erstmals eingefuhrte Block Praktisch alle Programmiersprachen die dieses Konzept in irgendeiner Form anbieten erlauben es dass Blocke ihre eigenen Variablen besitzen die sich von den Variablen anderer Blocke eindeutig unterscheiden lassen Solche Variablen heissen lokale Variablen Eine Variable die im ganzen Programm fur alle Blocke zur Verfugung steht heisst globale Variable Die Programmiersprache PHP kennt sogar den Begriff einer superglobalen Variable die fur alle Programme verfugbar sind die zur selben Zeit von einem PHP Interpreter bearbeitet werden Globale Variablen sind scheinbar bequem weil sie im ganzen Programm sichtbar sind Es ist nicht notwendig sie beim Aufruf einer Funktion als Parameter zu ubergeben Sie werden aber auch leicht zur Fehlerquelle wenn man zum Beispiel eine globale Variable versehentlich oder sogar bewusst fur verschiedene Zwecke benutzt Auch kann es passieren dass man eine lokale Variable mit dem Namen der globalen Variablen verwendet von dem man annimmt dass er im Programm bisher noch nicht benutzt wurde Wenn es diesen Namen aber schon als Variable mit passendem Typ gibt sofern dieser uberhaupt vom Compiler oder vom Laufzeitsystem gepruft wird dann wird deren Wert unkontrolliert uberschrieben und umgekehrt Ein schwer zu findender Fehler ist oft die Folge Erfahrene Entwickler verwenden globale Variablen nur auf modularer Ebene und nur dann wenn es sich nicht vermeiden lasst Sichtbarkeitsbereich von Variablen Scope Bearbeiten Unter dem Sichtbarkeitsbereich englisch scope einer Variablen versteht man den Programmabschnitt in dem die Variable nutzbar und sichtbar ist Da eine lokale Variable in den meisten Programmiersprachen den gleichen Namen tragen darf wie eine globale Variable sind Sichtbarkeitsbereiche nicht notwendig zusammenhangend Durch die Deklaration einer lokalen Variable wird die gleichnamige globale Variable fur einen bestimmten Block verdeckt das heisst sie ist in diesem Block nicht sichtbar Die Sichtbarkeitsregeln konnen auf zwei unterschiedliche sich gegenseitig ausschliessende Arten festgelegt werden Dabei ist das Konzept der Bindung wichtig Bindung bedeutet hier die Zuordnung eines bestimmten Namens zu der damit verbundenen Variablen lexikalisch oder statisch das heisst der umgebende Quelltext bestimmt die Bindung dynamisch das heisst die Ausfuhrungsschicht zur Laufzeit des Programms bestimmt die Bindung Im Fall einer lexikalischen Bindung sind die Bindungen fur einen ganzen Block immer die gleichen weil sie allein durch die Blockstruktur vorgegeben sind Man kann daher allein durch Analyse des Quelltextes einer Funktion verstehen wie sich die Funktion verhalt Dieses Konzept unterstutzt daher modulare Programmierung Bei dynamischen Bindungsregeln konnen zur Laufzeit immer neue Bindungen eingefuhrt werden Diese gelten dann so lange bis sie explizit aufgehoben werden oder durch eine neue dynamische Bindung verdeckt werden Man kann daher durch Analyse des Programmtextes einer Funktion nicht notwendigerweise verstehen wie sich diese verhalt Selbst die Analyse des gesamten Programmtextes eines Programms hilft nicht Es lasst sich statisch nicht verstehen wie sich die Funktion verhalt Ihr Verhalten hangt von den jeweiligen direkt und indirekt aufrufenden Funktionen ab Dies widerspricht dem Konzept des modularen Programmierens Die meisten modernen Programmiersprachen unterstutzen nur lexikalische Bindung zum Beispiel C C ML Haskell Python Pascal Einige wenige unterstutzen nur dynamische Bindung zum Beispiel Emacs Lisp Logo und einige zum Beispiel Perl und Common Lisp erlauben dem Programmierer fur jede lokale Variable festzulegen ob sie nach lexikalischen statischen oder dynamischen Regeln gebunden sein soll nbsp Beispiel lexikalisch im Gegensatz zu dynamisch Bearbeiten C und C verwenden lexikalische statische Gultigkeitsbereiche int x 0 int f return x int g int x 1 return f g gt 0 Im obigen Programmfragment ergibt g immer 0 den Wert der globalen Variablen x nicht den Wert der lokalen Variablen x in g Dies ist so weil in f immer nur das globale x sichtbar ist In Perl konnen lokale Variablen lexikalisch statisch mit dem Schlusselwort my oder dynamisch mit dem irrefuhrenden Schlusselwort local deklariert werden 4 Das folgende Beispiel entspricht dem obigen in C x 0 sub f return x sub g my x 1 return f print g n Dieses Beispiel benutzt my um x in g einen lexikalischen statischen Sichtbarkeitsbereich zu geben Daher wird g immer 0 ergeben f kann g s x nicht sehen obwohl dies zum Zeitpunkt zu dem f aufgerufen wird noch existiert x 0 sub f return x sub g local x 1 return f print g n Dieses Beispiel benutzt local um x in g einen dynamischen Sichtbarkeitsbereich zu geben Somit kann f den lokal in g geltenden Wert von x verwenden und g liefert den Wert 1 In der Praxis sollte man in der Regel fur Variablen in Perl my verwenden Lebensdauer von Variablen Bearbeiten Unter der Lebensdauer einer Variablen versteht man den Zeitraum in dem die Variable Speicherplatz reserviert hat Wird der Speicherplatz fur andere Zwecke wieder freigegeben so stirbt die Variable und ist nicht mehr nutzbar Lokale Variablen werden bei jedem Aufruf der Funktion erstellt In der Regel wird der Speicherplatz beim Verlassen der Funktion wieder freigegeben Sichtbarkeitsbereich und Lebensdauer von Variablen sind in klassischen blockstrukturierten Programmiersprachen so aufeinander abgestimmt dass Speicherplatz fur eine Variable nur so lange zugeordnet sein muss wie Code aus dem Sichtbarkeitsbereich ausgefuhrt wird Als Konsequenz davon lasst sich eine besonders einfache Art der Speicherverwaltung verwenden Lokale Variablen werden automatisch zur Laufzeit auf einem Stapelspeicher angelegt sobald ein Block betreten wird Bisweilen werden diese Variablen daher automatische Variablen genannt Technisch gesprochen wird ein Aktivierungsblock auf einem Laufzeitstapel angelegt der beim Verlassen des Blocks wieder entfernt wird In manchen Programmiersprachen zum Beispiel C gibt es einen Zusatz static bei der Deklaration der nur die Sichtbarkeit einer Variablen auf den Namensraum der Funktion einschrankt nicht aber ihre Lebensdauer Die Sichtbarkeit einer solchen Variablen verhalt sich also wie die einer lokalen Variablen die Lebensdauer dagegen wie die einer globalen das heisst beim Eintritt in die sie umschliessende Funktion hat sie exakt den gleichen Wert wie am Ende des letzten Aufrufs der Funktion Auf der Implementierungsseite sind dafur keine besonderen Vorrichtungen notwendig Die Variable wird einfach im Aktivierungsblock des Hauptprogramms angelegt Speicherzuweisung Bearbeiten Die Besonderheiten der Variablenzuweisung und die Darstellung ihrer Werte variieren stark sowohl zwischen Programmiersprachen als auch zwischen Implementierungen einer bestimmten Sprache Viele Sprachimplementierungen weisen Platz fur lokale Variablen zu deren Umfang fur einen einzelnen Funktionsaufruf auf dem Aufrufstapel gilt und deren Speicher bei der Ruckkehr der Funktion automatisch zuruckgefordert wird Im Allgemeinen wird bei der Namensbindung der Name einer Variablen an die Adresse eines bestimmten Blocks im Speicher gebunden und Operationen an der Variablen manipulieren diesen Block Das Referenzieren ist haufiger bei Variablen deren Werte beim Kompilieren des Codes grosse oder unbekannte Grossen haben Solche Referenzvariablen Zeiger verweisen auf die Position des Werts anstatt den Wert selbst zu speichern der aus einem Speicherbereich zugewiesen wird der als Heap bezeichnet wird Gebundene Variablen haben Werte Ein Wert ist jedoch eine Abstraktion In der Implementierung wird ein Wert durch ein Datenobjekt dargestellt das irgendwo gespeichert ist Das Programm oder die Laufzeitumgebung muss Speicher fur jedes Datenobjekt reservieren und da der Speicher endlich ist sicherstellen dass dieser Speicher zur Wiederverwendung bereitgestellt wird wenn das Objekt nicht mehr zur Darstellung des Werts einer Variablen benotigt wird Vom Heap zugewiesene Objekte mussen zuruckgefordert werden insbesondere wenn die Objekte nicht mehr benotigt werden In einer Programmiersprache mit Garbage Collector zum Beispiel C Java oder Python fordert die Laufzeitumgebung Objekte automatisch zuruck wenn vorhandene Variablen nicht mehr auf sie verweisen konnen In Programmiersprachen ohne Garbage Collector zum Beispiel C oder C muss das Programm und der Programmierer explizit Speicher zuweisen und ihn spater freigeben um seinen Speicher zuruckzugewinnen Andernfalls kommt es zu Speicherverlusten bei denen der Heap wahrend der Programmausfuhrung aufgebraucht wird Wenn sich eine Variable auf eine dynamisch erstellte Datenstruktur bezieht kann auf einige ihrer Komponenten nur indirekt uber die Variable zugegriffen werden Unter solchen Umstanden mussen Garbage Collectors einen Fall behandeln in dem nur ein Teil des von der Variablen erreichbaren Speichers zuruckgefordert werden muss Namenswahl BearbeitenDie Wahl von Variablennamen bleibt meist dem Programmierer uberlassen Zur Vereinfachung der Nachvollziehbarkeit der Quelltexte empfiehlt es sich moglichst selbsterklarende Variablennamen oder auch sogenannte sprechende Variablennamen zu verwenden selbst wenn dies zu recht langen Bezeichnern fuhrt 5 Namenskonventionen fur Variablen verbessern die Lesbarkeit und Wartbarkeit der Quelltexte Moderne Editoren haben Vorrichtungen um den Schreibaufwand auch bei langen Variablennamen zu reduzieren Nach der Kompilierung ist der Programmcode weitgehend oder sogar vollstandig unabhangig von den verwendeten Variablennamen Initialisierung BearbeitenVariablen sollten vor ihrer Benutzung initialisiert werden das heisst einen definierten Wert zugewiesen bekommen Dies kann durch die Vergabe von Standardwerten durch das Laufzeitsystem der verwendeten Programmiersprache geschehen oder durch explizite Zuweisung eines Wertes an die Variable Bei Programmiersprachen die nicht automatisch alle verwendeten Variablen initialisieren sind uninitialisierte Variablen eine Quelle fur schwer zu findende Fehler Da die Variable ohne Initialisierung einen zufalligen Wert enthalt wird auch das Verhalten des Programms unvorhersagbar so dass es manchmal falsche Ergebnisse liefert oder gar absturzt Enthalt der fur die Variable reservierte Speicherbereich einen scheinbar erwarteten Inhalt aus einem vorhergehenden Programmdurchlauf so spricht man auch von einer Speicherinterferenz Siehe auch BearbeitenAttribut Programmierung Weblinks Bearbeiten nbsp Wiktionary Variable Bedeutungserklarungen Wortherkunft Synonyme UbersetzungenEinzelnachweise Bearbeiten Festlegen und Loschen von Laufzeitvariablen ein Beitrag im C Community Forum die betreffende Seite wurde zuletzt geandert am 10 Juli 2008 mit einem Zitat vom Visual Studio Analyzer wo es heisst Laufzeitvariablen sind Name Wert Paare die von Ereignisabonnenten festgelegt und von Ereignisquellen gelesen werden Das Verwenden von Laufzeitvariablen hilft beim Sammeln genauer Einzelheiten uber bestimmte Ereignisse Tim Lindholm Frank Yellin The Java Virtual Machine Specification Addison Wesley 1996 A variable is a storage location Michael Sperber William Clinger R K Dybvig Matthew Flatt Anton van Straaten Report on the Algorithmic Language Scheme Revised 5 97 Scheme allows identifiers to stand for locations containing values These identifiers are called variables What s the difference between dynamic and static lexical scoping Perl FAQ 4 3 N Gorla A C Benander B A Benander Debugging Effort Estimation Using Software Metrics In IEEE Hrsg IEEE Transactions on Software Engineering Band 16 Nr 2 Februar 1990 S 223 231 doi 10 1109 32 44385 englisch Abgerufen von https de wikipedia org w index php title Variable Programmierung amp oldid 236665453