Lua Logo
Variablen in Lua





Was ist das?



Nun wir arbeiten ja mit dem Computer und haben viele Werte, die wir uns merken müssen. Später brauchen wir sie ja noch. Diese Daten legt der Computer auf einem gewissen Platz im Speicher ab. Wie der das macht und wo er das tut müssen wir in LUA nicht wissen.

Aber um wieder an diese Daten zu kommen vergeben wir ihnen einen Namen. Mit diesem Namen kommen wir zu jeder Zeit an diese Daten (wenn sie da sind)



Variablen - Namen





Wie wir das Kind nennen ist egal. Allerdings gibt es auch hier einige Regeln



  • Eine Variable muss mit einem Buchstaben oder Unterstrich beginnen
  • Groß und Kleinschreibung ist sehr wichtig
  • Es dürfen keine anderen Zeichen als Buchstaben, Zahlen und Unterstrich verwendet werden.



Variablen - Gültigkeitsbereich




Wie das Wort schon sagt, gibt es also Bereiche in denen Variablen gültig sind. Dies hat verschiedene Gründe und ist auch sehr nützlich.

In vielen Sprachen gibt es einige verschiedene Gültigkeitsbereiche.

In LUA gibt es nur zwei.



  • Global
  • Local


Globale Variable sind überall vorhanden.

Locale Variablen nur in dem Block in dem sie erzeugt werden und sie existieren nur so lange bis der Block verlassen wird.



Vorweg etwas zum Block:

In LUA bewegt sich alles in Blöcken. Diese beginnen mit einer Anweisung dann der Block in dem gearbeitet wird und dann das Wort end (end mit einer Ausnahme. Kommt noch). Diese Blöcke können nun wiederum andere Blöcke in sich haben.



Dem Block werden wir noch mehrfach begegnen. Aber wie kann man sich local und global richtig vorstellen?



Stellen wir uns ein Haus mit Spiegeln vor. Die Spiegel kann man nur in eine Richtung durchsehen. Von außen kann man nicht hineinsehen in unseren Block. (Der Block ist das Glashaus) Variablen die im Glashaus als local bezeichnet werden, kann man von außen nicht sehen. (keine Chance). Nur die, bei denen das Wort local nicht davor steht, kann man auch von außen sehen, denn diese sind global.



Eine locale Variable zeigen wir dem Übersetzter an in dem wir einfach das Wort local davor setzten.

local und end gehören übrigens zu den reservierten Worten







Variablen - Typen (Werte)





Variable speichern Werte. Diese können die unterschiedlichten Formen haben. Es können Zahlen, Buchstaben (Text), Zustände (wahr falsch) usw. sein.

Es gibt:



  • Nil (nichts)(leer)(nicht vorhanden)
  • Zahlen
  • Zeichen (Buchstaben, Wörter, etc.)
  • Zustände (wahr/falsch)(true /false)(ja/nein)(1/0)
  • Funktionen (Spezialfall eines Blocks)



Es gibt noch zwei, aber das soll erst mal reichen.



NIL





Viel gibt es hierzu nicht zu sagen, nur dass es gut ist, dass es dies gibt. Wann auch immer wir auf eine Variable zugreifen wollen, die es nicht gibt, bekommen wir den Wert nil. Der Computer reagiert nicht mit irgendeinem Blödsinn oder einer Fehlermeldung.

Wollen wir eine Variable endgültig löschen, so weisen wir ihr den Wert nil zu. Dann ist sie weg.



Zuweisung:

Bisher haben wir schon einiges über Variable erfahren, nur nicht, wie man ihnen einen Wert zuweist. Da wir jetzt einen Wert haben machen wir das einmal

willi234 = nil



"=" ist ein so genannter Zuweisungsoperator. Hier bekommt die Variable willi234 den Wert nil zugewiesen. Sie ist also weg.




Zahlen




Es leuchtet jedem ein, dass man zum Rechnen Zahlen benötigt. Daher gibt es für diese auch einen eigenen Typ. "number"

In fast allen Sprachen gibt es hier auch noch Unterscheidungen. Bei LUA nicht.


Zuweisung:

_omasAlter = 74
willisIntelligenz = 105
meinGutHaben = -55.26
einHalbMalWurzel2 = 0.707107




Was sehen wir im Code?


  • Zahlen haben als Dezimalzeichen einen Punkt (niemals ein Komma brauchen)
  • Ist die Zahl negativ (wie mein Guthaben) kommt ein Minus davor
  • Zuweisung mit dem Operator =
  • Verschiedene Schreibweisen von Variablennamen.


Zeichen





Nun haben wir ja nicht nur Zahlen mit denen wir arbeiten. Wir wollen z.B. auch mal etwas auf den Bildschirm ausgeben. Für diesen Fall gibt es den Typ: "string"



Ein String ist eine Aneinanderreihung von ASCII-Zeichen (was ist das schon wieder?)

Eigentlich, wie soll es anders sein, auch Zahlen. Nur da wir sie als String gekennzeichnet haben weiß der Computer, dass er damit nicht rechnen muss / kann.


Kleine Exkursion ins Reich der Bytes:

Wir brauchen das zwar nicht in LUA, aber zum Verständnis der Strings ist es nützlich.

Ein Bit ist die oben erwähnte 0 oder 1

Ein Byte ist ein Speicherbereich von 8 Bit (manchmal klein manchmal groß geschrieben)

Ein Zeichen setzt sich aus einem ganzzahliger Wert im Bereich von 0 bis 255 gespeichert wird.



Steht im Speicher eines Strings z.B die Zahl 56 dann ist das für ihn das "D"
Er greift das auf die so genannte ASCII [1] - Tabelle zurück
Die Aneinanderreihung von 76 85 65 heißt LUA.
Zuweisung:

ommasName = "Elfriede von der Heiden"
willisStammKneipe = 'Zum Treffpunkt'
varTyp1 = "function"
meineGeschichte = [[ geboren : ja
Geburtsort : keine Ahnung
]]



Was sehen wir im Code?
Strings werden eingeschlossen von Anführungszeichen. Das kann sowohl das Doppelte als auch das Einfache sein (wird noch nützlich sein). Nur gleich muss es sein. D.h. am Anfang und Ende das gleiche.
Dann können Texte auch noch mit [[ und ]] eingeschlossen werden. Das erlaubt uns auch den Text in der nächsten Zeile fortzuführen.

Zuweisung mit dem Operator =

Strings und Zahlen kann man ganz einfach miteinander verbinden und zwar mit zwei Punkten. Man muss die Zahl nicht in einen String umwandeln.


print( "Player"..5 )


Zustände



Hier haben wir einen Variablen - Typ der kennt nur zwei Zustände
In LUA wird das mit true und false gemacht.
Zuweisung:

williBesoffen = true
omaBoese = false
williesFrauBoese = true



Was sehen wir im Kasten?
  • Zuweisung einfach mit den reservierten Wörtern true oder false

Funktionen


Funktionen sind Variablen, die etwas machen wenn man sie aufruft. Diese werden uns noch sehr viel beschäftigen.
Sie beginnen entweder mit

RechneAus = function()
--oder
function RechneAus()



und enden einfach mit

end



Oben sehen wir, dass es zwei Arten gibt dem Variablen - Typ "function" einen Wert zuzuweisen. Beide sind gleichwertig.
Zwischen Beginn und Ende steht dann der Block der etwas macht

Tables


Tables sind einfach nur Variable, die in sich andere Variable gespeichert haben.
Variablen - Typ table

Dies erleichtert die Aufgabe beim Arbeiten mit Kolonnen ungemein. Es ist die Möglichkeit gegeben Ordnung ins Chaos zu bringen.
Diese werden uns auch noch sehr beschäftigen. Zunächst ein kurzer Einblick.

Zuweisung:

meinTable = {}



Was sehen wir im Code?
Name und Zuweisungsoperator kennen wir ja schon
Ein Table wird eingeschlossen in { für Anfang und } für Ende
Dazwischen stehen die Variablen. (hier steht nichts, also ist das ein leeres Table)
Kurz Beispiele ohne Erklärung, die kommt später.

Zuweisung:

meinTable = { 1, 4, "Willi", true, function() machwas end}
meinTable2 = { X= 255 , Y =10, geschwindigKeit =88)



heraus holen der Werte:

  • meinTable[1] -> 1
  • meinTable[2] -> 4
  • meinTable[3] -> "Willi"
  • meinTable[4] -> true
  • meinTable[5] -> function() machwas end
  • meinTable2.X -> 255
  • meinTable2.Y -> 10
  • meinTable2.geschwindigKeit -> 88

Wir sehen, es gibt zwei verschiedene Arten von Tables. Die einen haben eine Nummer, die anderen einen Namen.
Noch eine kurze Bemerkung: Tables können auch wieder Tables als Variable beinhalten.
Es kann alles wild durcheinander gemacht werden. (Obwohl Ordnung ja das halbe Leben ist)
So, das war eine kurze Vorstellung der Variablen um die sich beim Programmieren alles dreht. Bevor wir nun fortfahren möchte ich noch auf etwas hinweisen, dass ich stillschweigend unter gejubelt habe. Und zwar die Art wie ich die Variablen schreibe.

Gelernt haben wir ja, dass es in gewissen Grenzen egal ist.
Es hat sich aber bewährt auch dort eine gewisse Ordnung ein zu halten. Der Ordnungen gibt es verschiedene (wie soll es auch anders sein)

Meine Ordnung:

  • Normale Variablen fangen mit einem kleinen Buchstaben an
  • Funktionen beginnen mit einem großen Buchstaben
  • Parameter (kommt noch) haben als erstes einen Unterstrich

Ach, und noch eins. Variablen sind keineswegs an ihren Typ gebunden. Was zuerst eine "number" war kann durch Zuweisung ein "string" werden u.s.w

[1] ASCII / American Standard Code for Information Interchange
Die Vervielfältigung der auf diesen Seiten enthaltenen Informationen und Grafiken ist untersagt, ausgenommen davon ist sämtlicher auf diesen Seiten angezeigter Quellcode.
Siehe auch: Haftungsausschluss
Copyright © Robert Schmitz 2006