Datentypen

Willkommen in dieser Lektion über Datentypen aus unserer Reihe “Swift lernen”.

Jeder Topf hat einen passenden Deckel. Das hört man immer wieder von seinen Eltern, Bekannten oder im Fernsehen. Mit Datentypen ist es nicht anders. Wir Programmierer suchen ständig nach dem richten Topf für unseren Deckel. Gibt es den Topf nicht wird der er eben programmiert.

Es muss und kann jedoch nicht alles von uns programmiert werden. In dieser Lektion lernen wir wie man den richtigen Topf oder einen sehr gut passenden für unseren Deckel finden.

Für diesen Teil gibt es auch ein Video Tutorial hier auf YouTube.

Bedeutung

Wenn wir von Datentypen sprechen dann handelt es sich um eine Beschreibung für etwas was wir mit Daten füllen können. Sie sind eine Zusammenfassung von Informationen die für uns von großer Relevanz sind. Für unseren aktuellen Stand zusammengefasst enthalten Datentypen Informationen über Größen und erwartete Inhalte. In unserem ersten Kapitel haben wir bereits einige dieser Datentypen wie “bool“, “String” oder “Integer” kennen gelernt.

Einige Datentypen verwendet man für Zahlen, anderen wiederum für Wahrheitswerte oder für Zeichenketten. Datentypen sind aber weitaus mehr als nur Zahlen, Wahrheitswerte oder Zeichen. Wir können Klassen haben von den wir später Objekte erstellen (keine Sorge, dieses Horrorthema erwartet euch in Kapitel 3 – Objektorientierung). Es gibt Strukturen (struct) und Enumeratoren (enum).

Aber alles zu seiner Zeit. Gehen wir langsam an das Thema heran und vertiefen das ganze in den Folgekapiteln wenn wir es benötigen.

Bits und Bytes

Bevor wir uns den ersten Datentypen anschauen müssen wir uns mit einigen Basics beschäftigen. Ein Computer hat nur begrenzte Möglichkeiten Zahlen zu speichern und zu berechnen. Es gibt Tricks und Kniffs sehr  große Zahlen berechnen zu können, auch wenn das sehr sehr lange Dauern kann. Wir bewegen uns normalerweise in sehr begrenzten Bereichen für die Datenhaltung.

Um die Limitierungen zu verstehen müssen wir ein wenig über Bits und Bytes sprechen. Sie können diesen Bereich auch überspringen, wir raten aber dringend davon ab da es wichtig ist Größen zu verstehen.

Der Computer kennt nur nullen und einsen, an und aus. Mit diesen zwei Werten bewegen wir uns im binären Zahlensystem und nicht im Dezimalsystem, welches wir in der Schule gelernt haben. Wenn wir die Zahl zehn darstellen möchten schreiben wir diese einfach hin. Ein Computer kann das so aber nicht. Er kann kann ja nur null und eins.

Der Computer verfügt über Speicher und der Prozessor hat die Möglichkeit Speicheradressen anzusprechen in dem er Werte speichert. Je nachdem wie breit der Speicherbus ist und wie breit die Register des Prozessors sind kann ein moderner Computer heutzutage mit 32 Bit oder 64 Bit rechnen. Es gibt natürlich immer noch kleinere und auch größerer Systeme. Als Entwickler für OS X und iOS beschränken wir uns aber auf 32 und 64 Bit.

Zur Veranschaulichung nehme ich als Beispiel ein 32 Bit System. Ich stelle aber nur die ersten acht Bit dar. In diesen acht Bits kann ich acht Zustände gleichzeitig (0 oder 1) darstellen und speichern. Das Rechnen mit Bits und Bytes werden wir später noch lernen, aber die Darstellung können wir uns bereits jetzt einmal ansehen.

Der Computer sieht die Zahl zehn wie in der folgenden Tabelle.

bits_bytes_darstellung_10

Wir sehen acht Spalten die die acht Bits repräsentieren. Jedes Bit hat einen Wert der doppelt so groß ist wie sein Vorgänger. Damit der Computer nun die Zahl zehn speichern kann merkt er sich aus welchen Zweier-Komponenten er sich zusammen setzen kann. Dies wäre hier zum Beispiel “8” und “2” denn 8+2=10. Möchten wir die Zahl drei darstellen hätten wir eine “1” bei “1” und auch bei der “2”. Alle anderen Werte wären auf “0” gestellt.

Wenn man alle Spalten auf “1” setzt und die Werte zusammen rechnet kommen wir auf die Zahl “1+2+4+8+16+32+64+128=255”. Das trifft aber nur dann zu wenn man nur positive Werte speichert. Möchte man auch negative Zahlen speichern muss das irgendwo vermerkt sein. In der Informatik nimmt man dafür das höchste Bit als Vorzeichenbit. Ist die “128” mit “1” gesetzt handelt es sich um eine negative Zahl, ist es “0” ist der Wert positiv.

Der mögliche Zahlenraum verändert sich durch das Vorzeichen von “0-255” zu “-128-127”. Wir sprechen von unsigned und signed Zahlen. Also Zahlen mit und ohne Vorzeichen. Wenn wir den Zahlenbereich auf 16 Bit erhöhen erweitert sich der Zahlenbereich auf “0-65.535” ohne Vorzeichen und “-32768-32767”. Wir erkennen das mit der Anzahl der möglichen Bits sich auch die Möglichkeiten der Zustände und damit auch der mögliche Zahlenbereich vergrößert.

Buchstaben und andere Daten werden im Speicher nicht anders als Zahlen dargestellt. Für den Computer ist ein Buchstabe auch nur eine Zahl. Man kann sogar mit Buchstaben rechnen, aber das übersteigt unser derzeitig benötigtes Wissen.

Integer, Double, Floats und andere Zahlen

Integer

Bei Integer Zahlen, also Ganzzahlen haben wir neben dem allgemeinen Datentypen “Integer” auch die Möglichkeit den Zahlenbereich bewusst zu definieren in dem wir statt “Integer” einen der folgenden Datentypen – wie z.B. “Int8” – nutzen. Das macht natürlich nur Sinn wenn die Zahl die ich speichern möchte zwischen “-128-127” liegt. In der folgenden Auflistung sehen Sie die Maximalbereiche für die in Swift verfügbaren Integer Zahlen.

Swift_Zahlenbereiche

 

 

Wie kann ich das ganze jetzt für mich definieren? Schreiben Sie einfach den Datentyp hinter den Variablennamen den Sie benötigen. Überprüfen Sie auch was passiert wenn der Zahlenbereich über- oder unterschritten wird.

Swift_Zahlenbereich_überschrittenWir initialisieren die Variable meineZahl mit dem Wert “0”. Danach testen wir die maximalen Werte eines Int8. Sobald ich den Zahlenwert über das Maximum lege bekommen wir “-128” als Wert weil der Speicher “übergelaufen” ist.

 

Xcode erkennt den Überlauf und gibt auch einen entsprechenden Fehler aus. Wenn Sie später vielleicht ein Eingabefeld haben wo ein Benutzer eine Zahl eingeben kann müssen Sie zwingend prüfen ob die gegebene Zahl auch in Ihre Variable passt. Sollte das nicht so sein kann es zu sehr unschönen Nebeneffekten oder zu Abstürzen führen.

Double und Float

Floats und Doubles haben unterschiedliche Größen je nachdem ob es sich um ein 64 oder 32 Bit System handelt. Generell ist ein Double immer doppelt so groß wie ein Float. Doubles sind 64 Bit groß unter 64 Bit Systemen und 32 Bit unter 32 Bit Systemen. Floats haben hier jeweils genau die Hälfte der Bits.

Wo ist der Unterschied bei diesen beiden Typen? Floats sind ungenauer als Doubles wenn es um Nachkommapräzision geht. Doubles und Floats setzen sich aus einem Exponent und einer Mantisse zusammen. Wir werden hier nicht genauer darauf eingehen da das ganze im Moment nicht für uns nötig ist.

Also wundern Sie sich nicht wenn Sie unterschiedliche Ergebnisse bei Floats und Doubles bekommen. Werfen wir einen Blick auf das folgende Beispiel.

Es ist sehr schön zu erkennen das hinter dem Komma die Präzision abgenommen hat und die Ergebnisse unterschiedlich sind. Um so mehr Präzision Sie benötigen um so mehr Bits sollte Ihr Datentyp haben. Der Double wäre hier jetzt angebrachter als ein Float.

Fazit

Dieser kleine Einblick in Datentypen ist nur der erste Exkurs um Datentypen ein wenig mehr zu verstehen. Wir werden in späteren Lektionen und Kapiteln noch viele weitere Datentypen wie enums, structs oder Klassen kennenlernen. Es schadet nicht sich noch ein wenig mit den Grenzen auseinandersetzen, für uns reicht das aktuelle Wissen aber bereits um die ersten Funktionen und Strukturen schreiben zu können.

In unserer nächsten Lektion werden wir endlich Funktionen kennenlernen. Mit Funktionen können wir unser Programm intelligent unterteilen und wiederkehrende Aufgaben auslagern.

Previous post

Swift lernen: Logische Operatoren

Next post

Swift lernen: Funktionen Grundlagen

The Author

Stefan Mayer-Popp

Stefan Mayer-Popp

Stefan Mayer-Popp ist leidenschaftlicher Softwareentwickler, Fachbuchautor, Trainer und Berater aus dem Münchner Umland. Als passionierter IT- und Apple-Profi hat Mayer-Popp unzählige IT-Projekte in verschiedensten Branchen erfolgreich umsetzen und unterstützen können. Neben seiner Tätigkeit als Teamleiter bei CHECK24 teilt Mayer-Popp seine Erfahrungen auf IT-Veranstaltungen und propagiert Swift aktiv auf verschiedenen Meetups.

No Comment

Leave a reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.