Lua Logo
Verzweigungen

if Bedingung then
Block
end

Das if heißt: wenn. Das then heiß: dann

In Worte gefasst: Wenn die Bedingung erfüllt ist (und nur dann) führe den Block aus.

Das Gerüst haben wir ja jetzt, wir brauchen nur noch eine Bedingung und einen Block

Schaffen wir eine Bedingung.

player eins lebt --> player1Lebt == true

Nun der Block (Wir wollen ja was sehen, also nehmen wir print dazu)

Drucke aus, dass der Player lebt --> print ("Der Spieler eins lebt")

Jetzt fügen wir alles zusammen.

if player1Lebt == true then
print ("Der Spieler eins lebt")
end

Einzeln betrachtet doch nicht zu schwer? Jetzt probieren wir dies auch mal im Editor.
Verzweigungen
Was machten wir?

Wir vergleichen die Variable player1Lebt mit dem Wert true als Vergleichsoperator nahmen wir das "==" (ist etwas gleich dem anderen)
D.h. ist das, was in dem Speicher für player1Lebt steht, gleich dem Wert true?
Nehmen wir den Vergleichsoperator "~=" (ist etwas ungleich dem anderen) dann druckt er nichts aus. (er lebt ja noch)

Betrachten wir einmal das Bild. Alles steht ganz links nur unser Block steht weiter nach rechts. Warum das?
Ganz einfach.
Das dient der Übersicht. Macht man das nicht, so ist das Script nach kurzer Zeit nicht mehr oder nur sehr schwer zu lesen.

Hätte ich oben die Erklärung so geschrieben:

Verzweigungen:

if Bedingung then Block end
if Bedingung then Block1 else Block2 end
if Bedingung1 then Block1 elseif Bedingung2 then Block2 elseif Bedingung3 then Block3 else Block4 end

dann wäre sie nur sehr schwer lesbar.

Was lernen wir daraus: Wir rücken ab jetzt jeden Block ein.

Weiter im Text

if Bedingung then
Block1
else
Block2
end

Alles kennen wir nur diese Else nicht. Das ist aber kein Mädchenname sondern heiß
wenn es nicht so ist dann mache meinen Block

In Worte gefasst:
  • Wenn die Bedingung erfüllt ist führe den Block1 aus.
  • Ist die Bedingung nicht erfüllt, dann führe Block 2 aus.
Bedingung und Block1 haben wir schon. Als Block 2 schreiben wir einfach dass der Spieler nicht lebt.
Jetzt fügen wir das wieder zusammen und probieren ob es funktioniert.
  • Dann setzten wir player1Lebt = false --> probieren
  • Dann tauschen wir den Vergleichsoperator. --> probieren, probieren.
Weiter im Text

if Bedingung1 then
Block1
elseif Bedingung2 then
Block2
else
Block3
end

Wenn wir jetzt dieses elseif noch kennen, dann haben wir alles.
elseif heißt etwa wenn nicht, dann prüfe meine Bedingung.

Zunächst müssen wir uns daran erinnern, dass das Programm eins nach dem anderen ließt.
  • Trifft Bedingung1 zu? --> Block1
  • Wenn nicht, trifft Bedingung2 zu --> Block2
  • Wenn das alles nicht zutrifft --> Block3
elseif können wir einbringen soviel wir möchten. Das else muss nicht dabei sein. Man kann es auch weg lassen. Wenn es aber da ist muss es immer zum Schluss stehen!
Bedingung1 muss nichts mit Bedingung2 zu tun haben. Wir können oben fragen ob Spieler 1 lebt und unten ob Enysa rote Haare hat. Das ist völlig wurscht.

  • Trifft Bedingung1 zu? --> Block1
  • Wenn nicht, trifft Bedingung2 zu? --> Block2
  • Wenn nicht, trifft Bedingung3 zu? --> Block3
  • Wenn nicht, trifft Bedingung4 zu? --> Block4
  • Wenn nicht, trifft Bedingung5 zu? --> Block5
  • und so weiter

Eins haben alle diese Formen gemeinsam. Trifft irgendeine Bedingung zu, so wird der dazugehörige Block ausgeführt und die Verzweigung ist zu Ende. Alles Nachfolgende wird nicht mehr geprüft/ausgeführt.

Übungen dazu:

Bedingungen, die mir einfallen:

  • Hat player1 mehr Gold als player2? --> Vergleichsoperator ">"
  • Hat player1 weniger Gold als player2? --> Vergleichsoperator "<"
  • Hat player1 den gleichen Namen wie player2?
  • Heißt player1 Rothertan?
Blöcke:

Wir bleiben vorerst beim print (irgendwas).

Jetzt üben........(mehr Bedingungen erfinden) (elseif gebrauchen)

Was passiert, wenn wir fragen ob player1 mehr oder weniger Steine hat als player2?

if player1Steine > player2Steine then

Es kommt ein Error: attempt to compare number with nil

--> Versuch eine Zahl mit nil zu vergleichen.

Das geht also nicht! Lassen wir uns etwas einfallen.

Wir wissen von oben, dass wir bei nicht Vorhandensein einer Variablen nil heraus bekommen, wenn wir den Wert abfragen. Das nützen wir jetzt aus.
Wir fragen zuerst ob die Variable player1Steine existiert und wenn das zutrifft fragen wir ob player1 mehr oder weniger Steine hat als player2. (das erste mal Block in Block). Da helfe ich noch.

if player1Steine ~= nil then
-- Block 1
if player1Steine > player2Steine then
-- Block 2
print ("Spieler 1 hat mehr Steine als Spieler 2")
end
end

Wir sehen: schön eingerückt

Also ist die Variable vorhanden (egal was drin steht) ist die Bedingung

player1Steine ~= nil --> true also stimmt. Die Variable ist also vorhanden.

Dann geht er erst in diesen Block hinein.
Damit wir jetzt auch etwas angezeigt bekommen, müssen wir Spieler 1 auch Steine mehr geben als Spieler 2. Oder, was eine gute Übung ist, die Abfrage umbauen.
  • Hat Player eins Steine
  • Wenn ja, hat er mehr
  • Hat er gleich viel
  • Oder weniger (else)
  • Hat er keine --> ausdrucken (else)
!!!! Jetzt aufpassen: Statt If player1Steine ~= nil then
Kann man auch schreiben: If player1Steine then

Schreibt man das wie in der zweiten Reihe, so wird geprüft ob die Variable vorhanden ist oder ob die Variable true ist (beim Type "boolean")
Aber Achtung eine Zahl die den Wert 0 hat ist auch vorhanden
Ein String der leer ist, ist auch vorhanden. u.s.w.

Warum sagt der uns das jetzt erst? Hier hätten wir uns doch Arbeit sparen können

if player1Lebt == true then
print ("Der Spieler eins lebt")
end

if player1Lebt then
print ("Der Spieler eins lebt")
end

Einfach hinnehmen.;)
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