Kontrollstrukturen
Schön das Sie zum sechsten Teil unserer Reihe „Swift lernen“ über Kontrollstrukturen angekommen sind.
In dieser Lektion lernen wir Dinge miteinander zu vergleichen. Vergleiche brauchen wir um Entscheidungen zu treffen. Dies kann z.B. eine Überprüfung sein ob ein Vorname einem bestimmen Wert entspricht oder ob A größer B ist.
Wir werden ständig Entscheidungen haben die unseren Programmablauf beeinflussen. Häufig z.B. die Überprüfung eines Passwortes. Hat der Benutzer das Passwort eingegeben, welches er auch bei der Registrierung genutzt hat? Wenn ja lassen wir ihn die App benutzen, sollte es aber falsch sein müssen wir dem Benutzer eine Fehlermeldung anzeigen.
In den folgenden Beispielen sehen wir uns verschiedene Möglichkeiten an um die ersten Vergleiche mit Kontrollstrukturen zu machen. Im Laufe unseres Tutorials werden wir weitere Bedingungen kennenlernen, die wichtigsten finden sie aber hier.
Für diesen Teil gibt es auch ein Video Tutorial hier auf YouTube.
Wahrheitswerte, Bool
Bei unseren Vergleichen erwarten wir einen Wahrheitswert. Dieser kann ja oder nein sein. Anders ausgerückt „true„ oder „false„. Es handelt sich hierbei um Boolesche Variablen. Wenn wir unsere Bedingung schreiben ist das ganze wie in der Mathematik durch Operatoren beschreibbar. Einen genauen Blick auf Operatoren haben wir in einem späteren Kapitel.
In dieser Lektion werden wir uns den Größer-, Kleiner- und Gleich-Operator ansehen und verwenden.
Hierfür benutzen wir die mathematischen Zeichen „<„, „>“ sowie „==“ und „!=“.
IF-Kontrollstruktur
1 2 3 |
if bedingung { Wenn Bedingung erfüllt } |
Eine Kontrollstruktur beginnt mit dem Keyword if gefolgt von einer Bedingung. Dies kann zum Beispiel 1 > 2 oder 2 == 2 sein. Danach öffnen wir eine Geschweifte Klammer „{“ welche mit einer weiteren Geschweiften Klammer „}“ geschossen werden muss. Eine Geschweifte Klammer können sie unter OS X mit gedrückter „Alt Taste + 8″ oder „Alt Taste + 9″ erstellen.
Die Geschweiften Klammern sind ein sogenannter „Code Block“ der nur ausgeführt wird wenn die Bedingung erfüllt wird. Alle Variablen oder Funktionen die Sie innerhalb dieser Geschweiften Klammern erstellen sind nach Beendigung der Kontrollstruktur nicht mehr verfügbar. Alles was ausserhalb der Klammern ist steht ihnen aber zur Verfügung. Es handelt sich hierbei um den sogenannten „Scope“. Es gibt lokale und globale Scopes. Dieses Thema werden wir aber noch einmal separat in einer späteren Lektion behandeln.
Erster Vergleich
1 2 3 4 5 6 7 |
let a = 42 let b = 40 // Ist wahr if a > b { print("a ist größer b") } |
Wir definieren zwei Variablen mit dem Namen „a“ und „b“. „a“ hat den Wert „42“ und „b“ den Wert „40“. In unserem ersten Vergleichen möchten wir prüfen ob „a“ größer „b“ ist. Wenn dies wahr ist, also true – a > b – möchte ich den String anzeigen. Da der Vergleich in unserem Beispiel true ist sehen wir auf der rechten Seite auch unseren String „a > b“, den wir in den Geschweiften Klammern definiert haben.
Schauen wir uns hier das Gegenteil an. Was passiert wenn ich den Vergleich umdrehe? Ich frage also ab: a kleiner b beziehungsweise „a < b“. Wir werden feststellen das unser String dann rechts nicht mehr ausgeben wird, der Vergleich also unwahr is, also false.
1 2 3 4 5 6 7 |
let a = 42 let b = 40 // Ist nicht wahr if a < b { print("a ist kleiner als b") } |
Probieren Sie doch einmal aus die Variable „a“ auf den Wert „39“ zu setzen und schauen Sie was rechts passiert.
else
Wie oben bereits erwähnt kommt es vor das wir ein Passwort überprüfen und je nachdem den Login gewähren oder eine Fehlermeldung anzeigen möchten . In meinem Beispiel nehme ich hier aber wieder meine Zahlen, definiert durch die Variablen „a“ und „b“ zum einfacheren Verständnis. Wir nutzen für „a“ wieder den Wert „42“ und für „b“ den Wert „40“.
1 2 3 4 5 6 7 8 |
let a = 42 let b = 40 if a < b { print("A ist größer als B") } else { print("A ist kleiner als B") } |
Wenn eine Bedingung nicht zutrifft, „a“ also kleiner „b“ ist wird bei unserer Kontrollstruktur jetzt der „else“ Teil ausgeführt. Dadurch das wir den „else“ Teil jetzt programmiert haben, können wir auch auf beide Wahrheitsfälle reagieren, je nachdem ob etwas wahr oder unwahr ist.
else if
Mit „else if“ haben wir die Möglichkeit mehrere Bedingungen und dazugehörige Code Blöcke zu definieren. Dies ist nicht immer sinnvoll und sollte aus unserer Sicht vermieden werden. Dennoch möchten wir es erwähnen. Schauen wir uns das folgende Beispiel an.
Wir definieren eine Variable „c“ mit den Werten „0″, „1″ oder „2″. Sie können diese Werte zum Testen einfach verändern. Wir schreiben eine „if“ Kontrollstruktur und als Bedingung prüfen wir ob „c“ größer als „1″ ist. Mit „else if“ prüfen wir eine zweite Bedingung falls die erste Bedingung nicht zugetroffen hat. Es wird geprüft ob „c“ kleiner „1″ ist. Sollten beide Bedingungen nicht zutreffen können wir davon ausgehen das „c“ gleich „1″ ist. In unserer Grafik sehen sie wie es sich auswirkt wenn wir die Zahl „c“ verändern.
Strings vergleichen
Selbstverständlich können wir auch die Inhalte von Strings vergleichen. Um Strings zu vergleichen können wir ebenfalls den Vergleichsoperator „==“ benutzen.
Wenn die Strings unterschiedlich sind kann auch ein „else“ Teil definiert sein. Die Kontrollstruktur arbeitet also für Zahlen und Strings gleichermaßen.
1 2 3 4 5 6 7 8 |
let stringA = "Stefan Popp" let stringB = "Ralf Peters" if stringA == stringB { print("Stefan und Ralf sind nicht gleich. Das ist nicht möglich") } else { print("Stefan und Ralf sind ungleich. So soll es sein!") } |
Ungleich Operator
Ein weiterer Operator ist der Ungleich-Operator. Dieser definiert sich durch die Zeichen „!=„. Wenn ein String also nicht dem anderen entspricht wird der Code Block ausgeführt. Die Bedingung ist also wahr.
1 2 3 4 5 6 |
let stringA = "Stefan Popp" let stringB = "Ralf Peters" if stringA != stringB { print("Stefan ist ungleich Ralf") } |
Im späteren Verlauf werden wir noch die switch-Anweisung kennenlernen. Diese Kontrollstruktur ist eine schöne alternative für Kontrollstrukturen mit vielen else-if vergleichen.
Wie geht es weiter?
Kontrollstrukturen sind ein wichtiger Schritt in den Grundlagen. Im nächsten Teil unserer Reihe „Swift lernen“ werden wir Schleifen kennenlernen und das neu gewonnene Wissen mit einsetzen.
6 Comments
Guten Tag,
Erstmal super Blog. Hab gerade das Buch Durchstarten mit Swift gekauft. Da ich neu in der Programmierung bin, bitte ich um Verständnis. Ich kenne den Unterschied zwischen if-else und switch nicht. Ist es schwer zu begreifen?
Besten Dank für das Feedback.
MfG
Giuseppe
Hallo Giuseppe,
da musst du dir keine Sorgen machen. Der switch ist durchaus ein wenig komplexer in Swift, da im Gegensatz zu anderen Sprache, dieser mehr Möglichkeiten bietet.
Am häufigsten wirst du in der Entwicklerwelt wahrscheinlich If/Else/Else-If antreffen.
Wir wünschen dir viel Spaß mit dem Buch!
Hallo Herr Popp,
aus reiner Neugier scane ich Ihr Tutorials durch, um einiges über die Programmiersprache Swift zu erfahren. Dabei habe ich mir folgende Fragen gestellt, die Sie mir hoffentlich beantworten können:
Ich habe bemerkt, dass die primitiven Datentypen Int, Double usw. groß geschrieben werden und als Sie in Ihren Videos eine Kommazahl geschrieben haben, tauchten nach dem Punkt Operator ‚.‘ Vorschläge für Methodenaufrufe auf. Daher meine Frage: „sind alle Datentypen in Swift Klassen?“.
In diesem Kapitel werden z.B. zwei Strings oder Integers mit dem Gleichheitsoperator == vergliechen. Daher meine Frage: „Werden Objekte in Swift auf dem Stack gespeichert oder werden Sie wie z.B. in Java auf dem Heap gespeichert und der Gleicheitsoperator wurde für Ints und Strings überladen?
Beste Grüße
Hallo =)
Das kommt ein wenig darauf an wie Intelligent ein Datentyp ein muss. Generell kann man aber sagen das alle Datentypen einer Enumeration, Struktur oder Klassen entspringen. Ein Aufteilung in Primitive Typen und Klassen/Strukturen wie in Obj-C/C++ haben wir glücklicherweise nicht.
Grüße zurück =)
Hallo Guys von Swift Blog
Als aller erstes: DANKE DANKE DANKE!! Bis jetzt läuft es Super, bin im Kapitel Kontrollstrukturen. Seit 3 Tagen immer wieder dran am probieren!
Echt gute Beschreibungen- Hoffe ich kann bald mal selbstständig n Programm schreiben…
Wieso ich aber diesen Text hier verfasse ist, weil ich einen kleinen Fehler entdeckt habe und zwar hier im Kapitel Kontrollstrukturen im Unterkapitel „ELSE“..
Im Programm steht
If a < b {
(print "A ist grösser als B")
}
else …
Ist zwar nur n kleiner Fehler, doch ich sehe wie professionel Sie arbeiten- deswegen die kurze Info 🙂
Vielen Dank
Ensar Basoglu
Hallo Ensar,
vielen Dank für dein Feedback und den Hinweis! In der zweiten Auflage ist dieser Fehler auch schon korrigiert. Trotzdem sind wie immer wieder Dankbar für aufmerksame Leser wie dich.
Viel Erfolg noch und beste Grüße
– Ralf