Variablen werden in der Computer-Prgrammierung in allen Arten von Programmiersprachen verwendet. Sie sind ein essentieller Bestandteil jedes Programms und sorgen für Flexibilität. Wie aber funktionieren Variablen innerhalb eines Programmes genau?
Wie schon aufgrund der Bezeichnung "Variable" zu erwarten ist, ist diese Art von Objekt ein Platzhalter für beliebige Werte, genau wie in einer mathematischen Formel. Variablen werden durch ihren Namen und den Datentyp definiert, ganz so wie die Elemente einer mathematischen Menge.
So wie mathematische Variablen im Rahmen von Gleichungen genutzt werden, um etwas zu berechnen, verwendet man Variablen in Computerprogrammen, um Werte zu berechnen oder den logischen Fluss des Programms zu steuern.
Da Variablen Platzhalter sind, kann das gleiche Programm immer wieder mit verschiedenen Werten für die Variablen genutzt werden, es muss dazu nicht geändert werden. Dies lässt Programme insgesamt flexibler werden.
Die Definition einer Variable im Quellcode eines Computerprogramms führt bei der Ausführung des Programms dazu, dass der Computer einen Teil des Arbeitsspeichers (im "RAM" des Computers) für diese Variable reserviert, in dem die zugehörigen Werte übergangsweise (für die Zeit der Ausführung des Programms) gespeichert werden können.
Der Ort dieses reservierten Speicherbereiches, der durch eine interne Speicher-Adresse ansprechbar ist, wird mit dem Namen der definierten Variable verknüpft. Bei jeder Nutzung der Variable innerhalb des Programms greift der Computer über die zugehörige Speicheradresse auf den reservierten Speicherbereich zu. So kann dann dort ein der Variable neu zugewiesener Wert gespeichert oder ein vorhandener Wert ausgelesen werden.
Der Umfang des bei der Variablen-Definition (oder bei Ihrer Initialisierung) reservierten Speicherbereichs hängt dabei vom Datentyp ab, der bei der Definition der Variable verwendet wird.
Die meisten (Standard-)Datentypen sind statisch und ändern sich während der Laufzeit des Programmes nicht, so dass sich der Umfang des von ihnen genutzen Speichers nicht ändert. Damit ist gleichzeitig auch der Bereich der Werte begrenzt, die eine Variable in einem Programm nutzen kann.
Jede Programmiersprache verfügt über eine gewisse Anzahl an Basis-Datentypen, die sich üblicherweise an den Datentypen orientieren, die vom Hauptprozessor (CPU) direkt oder nach einer einfachen Umwandlung verarbeitet werden können. Hierzu gehören Bits, Bytes, Integer-Werte (Ganzzahlen), Zeichen, Fließkomma-Zahlen u.a.
Durch die Verwendung von Gruppen aus jeweils mehreren Bytes für einige Datentypen kann eine Variable, die einen solchen Typ verwendet, eine größere Zahl von Werten nutzen. So nutzt zum Beispiel eine Variable des Typs "long integer" im Regelfall doppelt soviele Bytes wie eine einfache Variable des Typs "integer". Damit wird der mögliche Wertebereich mehr als verdoppelt: jedes Byte, dass die kleinste direkt und ohne Umwandlung vom Prozessor verarbeitbare Speichereinheit darstellt, besteht aus 8 Bits (die jeweils nur die Werte 0 oder 1 annehmen können) und kann daher insgesamt 256 verschiedene Werte annehmen. Für jedes hinzukommende Byte eines längeren Datentyps wird die Zahl der möglichen Werte um den Faktor 256 größer (bei zwei Bytes also 256 * 256 = 65536 mögliche Werte).
Alle Datentypen bauen auf dem Binärsystem sowie auf den grundlegenden Typen, die von den digitalen Prozessoren verarbeitet werden können, auf. Dies gilt auch für komplexe Objekt-Datentypen, die für die Definition einer Variable verwendet werden.
Wenn die Struktur eines Datentyps und der von ihm genutze Speicherumfang bekannt ist, ist es möglich, Variablen-Werte von Variablen mit unterschiedlichen Typen zu konvertieren oder zu übertragen. Falls Variablen mit verschiedenen Datentypen unterschiedlich große Speicherbereiche belegen, kann der Versuch einer Konvertierung oder Wertübertragung zu Speicherfehlern und falschen Werten führen.
Daher gibt es in den meisten Programmiersprachen eigene Funktionen zur Konvertierung oder Übertragung von Werten zwischen Variablen mit unterschiedlichen Datentypen.
Die meisten Programmiersprachen erlauben es, mehrere Variablen zu komplexeren, selbst definierten Datenstrukturen zusammenzubauen. Diese mit Namen versehenen Strukturen können dann als komplexe Datentypen für weitere Variablen genutzt werden.
Dabei besteht jede Struktur aus einer oder mehreren unterschiedlichen Variablen, die durch Standard-Datentypen oder andere Struktur-Datentypen definiert sind. Um auf die Werte der Variablen einer Struktur zuzugreifen, muss üblicherweise dem Namen der Variablen vom Typ der Struktur sowie der Name der untergeordneten Variable verwendet werden, die innerhalb der Struktur-Definition für den jeweiligen Wert verwendet wurde, zusammen mit einem Verweis- oder Refernz-Zeichen (oftmals ein Minus-Zeichen).
Aufbauend auf der Definition einer Struktur kann dann wiederum innerhalb des Computer-Speichers eine vollständige Tabelle definiert werden. Dabei stellen Variablen vom Typ der genutzten Struktur die Datenzeilen dar, und die Tabelle ist eine Liste mehrerer Variablen vom gleichen Struktur-Datentyp.
Die Definition einer Variablen als Instanz einer Objektklasse ist ähnlich wie die Definition einer Variable vom Typ einer Datenstruktur. Der Unterschied liegt jedoch darin, dass in einem Objekt (genauer gesagt einer Objekt-Instanz) nicht nur Variablen von verschiedenen Datentypen zur Speicherung von Werten enthalten sind, sondern auch Verweise auf Funktionen der verwendeten Objektklasse. Diese Funktionen (Methoden) sind Teil der Objektklasse und lassen sich als Teil des Objektes verwenden.
Durch den damit verbundenen zusätzlichen programmseitigen Umfang benötigen Objekte bzw. Objekt-Instanzen im Regelfall mehr Speicher als vergleichbare einfachere Datentypen.
Bei manchen Anwendungen werden Variablen nicht zur Speicherung von Einzelwerten verwendet, sondern um eine bestimmte Menge Speicher im Arbeitsspeicher (RAM) des Computers für die spätere Nutzung zu reservieren, ohne dass vorab die Struktur oder der Typ der Daten bekannt ist, die dort zwischengespeichert werden sollen.
Für solche Fälle gibt es in einigen Programmiersprachen spezielle, unterschiedliche Funktionen und Wege, um solche Speicherblöcke (memory blocks) mit einer festgelegten Größe zu reservieren.
Im Gegensatz zu Variablen mit genau definierbaren Daten- oder Strukturtypen erfordert das Arbeiten mit solchen Speicherblöcken in eigenen Programmen die Definition und Verwendung geeigneter selbst geschriebener Funktionen, mit denen auf die reservierten Speicherbereiche zugegriffen werden kann. Diese Funktionen müssen je nach Anforderung in der Lage sein, Daten in diese Blöcke zu Schreiben oder von dort wieder auszulesen, und sie ggf. ganz oder in Teilen in Variablen mit anderen Datentypen zu konvertieren. Solche Funktionen sind für die Standard-Datentypen bereits in der jeweiligen Programmiersprache enthalten.
Manche Programmiersprachen erlauben es, Zeiger-Variablen zu definieren.
Eine Zeiger-Variable - im Programmier-Jargon schlicht Zeiger genannt - enthält (innerhalb des von ihr genutzen Speicherbereichs) anstelle eines direkten Wertes von einem bestimmten Typ lediglich einen Verweis auf eine Speicheradresse, unter der ein Wert dieses Typs gespeichert ist. Über diesen Adress-Verweis kann ein Programm auf den eigentlichen Wert bzw. dessen Speicherbereich zugreifen.
Da die in der Zeiger-Variable gespeicherte Adresse genauso verändert werden kann wie ein normaler Variablenwert, lassen sich Zeiger dazu verwenden, um dynamische Strukturen wie verknüpfte Listen oder binäre Bäume innerhalb des Computerspeichers zu erstellen und sie während der Laufzeit des Programms beliebig zu verändern.
Ohne Variablen müssten Computerprogramme ständig angepasst oder neu geschrieben werden, um sie laufend an veränderte Bedingungen anzupassen.
Dank der Fortschritte in der Computertechnologie, der Menge an verfügbarem Hauptspeicher usw. können heutzutage mit Hilfe von Variablen beliebige Arten von Daten gespeichert, verarbeitet und verwaltet werden, angefangen von einfachen Zahlenwerten über Texte bis hin zu Bildern und Filmen.
Variablen sind daher für Computerprogramme ebenso essentiell wie sie es für beliebige mathematische Berechnungen sind.