Sobes.tech
Intern

Was sind Datentypen und welche gibt es?

sobes.tech KI

Antwort von AI

Datentypen definieren den Satz möglicher Werte und Operationen, die auf ihnen ausgeführt werden können. In Swift werden sie in Werttypen und Referenztypen unterteilt.

Werttypen:

  • Werte werden beim Zuweisen oder Übergeben an eine Funktion kopiert.
  • Jede Variable oder Konstante speichert eine eigene unabhängige Kopie der Daten.
  • Änderungen an einer Kopie beeinflussen die anderen nicht.

Beispiele für Werttypen:

  • Strukturen (struct)
  • Aufzählungen (enum)
  • Tupel (tuple)
  • Grundtypen: Int, Double, Bool, String, Arrays (Array), Wörterbücher (Dictionary), Mengen (Set).
// Beispiel Werttyp: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 erhält eine Kopie von p1
p2.x = 10 // Änderung an p2 beeinflusst p1 nicht

print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

Referenztypen:

  • Werte werden nicht kopiert. Beim Zuweisen oder Übergeben
  • wird eine Referenz auf dasselbe Datenexemplar im Speicher übertragen.
  • Mehrere Variablen oder Konstanten können auf dasselbe Exemplar verweisen.
  • Änderungen über eine Referenz sind in allen anderen sichtbar.

Beispiele für Referenztypen:

  • Klassen (class)
  • Funktionen (func)
  • Closures (closure)
// Beispiel Referenztyp: class
class Circle {
    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }
}

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 verweist auf dasselbe Exemplar wie c1
c2.radius = 10.0 // Änderung an c2 wirkt sich auf c1 aus

print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0

Tabelle der Haupttypen:

Kategorie Typ(e) Wert-/Referenztyp Beschreibung
Ganzzahlen Int, UInt, Int8, UInt8 usw. Wert Ganze Zahlen unterschiedlicher Größe, mit oder ohne Vorzeichen
Fließkommazahlen Float, Double Wert Zahlen mit Dezimalanteil
Boolesche Werte Bool Wert Logische Werte (true oder false)
Strings String Wert Folge von Zeichen
Sammlungen Array, Dictionary, Set Wert Geordnete/nicht geordnete Sammlungen gleichartiger Elemente
Strukturen struct Wert Benutzerdefinierte zusammengesetzte Typen, die zusammenhängende Werte speichern
Aufzählungen enum Wert Definieren einen gemeinsamen Typ für eine Gruppe verwandter Werte
Tupel (value1, value2, ...) Wert Gruppieren mehrere Werte in einen einzigen zusammengesetzten Typ
Klassen class Referenz Benutzerdefinierte zusammengesetzte Typen, die Vererbung und Referenzverhalten unterstützen
Funktionen () -> Void, (Int) -> String usw. Referenz Ausführbare Codeblöcke
Closures { (parameters) -> return type in code } Referenz Selbstständige Codeblöcke, die übergeben und verwendet werden können
Optionale Type? (Syntaktischer Zucker für Optional<Type>) Wert Repräsentiert entweder einen Wert vom Typ Type oder dessen Fehlen (nil)

Die Wahl zwischen Wert- und Referenztypen hängt von der Aufgabe ab: Werttypen sind vorzuziehen für kleine Daten und zur Gewährleistung der Thread-Sicherheit, Referenztypen für komplexe Objekte, die gemeinsamen Zustand und Vererbung erfordern.