Sobes.tech
Intern

Ce sunt tipurile de date și care există?

sobes.tech AI

Răspuns de la AI

Tipurile de date determină setul valorilor posibile și operațiile care pot fi efectuate asupra lor. În Swift, acestea sunt împărțite în Tipuri de Valoare și Tipuri de Referință.

Tipuri de Valoare:

  • Valorile sunt copiate la atribuire sau transmitere către o funcție.
  • Fiecare variabilă sau constantă păstrează o copie independentă a datelor.
  • Modificările într-o copie nu afectează celelalte.

Exemple de Tipuri de Valoare:

  • Structuri (struct)
  • Enumerări (enum)
  • Tuples (tuple)
  • Tipuri de bază: Int, Double, Bool, String, array-uri (Array), dicționare (Dictionary), seturi (Set).
// Exemplu de Tip de Valoare: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 primește o copie a lui p1
p2.x = 10 // Modificarea lui p2 nu afectează pe p1

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

Tipuri de Referință:

  • Valorile nu sunt copiate. La atribuire sau transmitere
  • către o funcție, se transmite o referință la aceeași instanță de date din memorie.
  • Mai multe variabile sau constante pot face referire la aceeași instanță.
  • Modificările printr-o referință sunt vizibile prin toate celelalte.

Exemple de Tipuri de Referință:

  • Clase (class)
  • Funcții (func)
  • Closures (closure)
// Exemplu de Tip de Referință: class
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 face referire la aceeași instanță ca și c1
c2.radius = 10.0 // Modificarea lui c2 afectează și pe c1

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

Tabel cu principalele tipuri:

Categoria Tip(i) Tip Valoare/Referință Descriere
Numere întregi Int, UInt, Int8, UInt8 etc. Valoare Numere întregi de diferite dimensiuni, semnate și nesemnate
Numere în virgulă mobilă Float, Double Valoare Numere cu parte fracționară
Booleene Bool Valoare Valori logice (true sau false)
Șiruri de caractere String Valoare Secvență de caractere
Colecții Array, Dictionary, Set Valoare Colecții ordonate/neordonate de elemente de același tip
Structuri struct Valoare Tipuri compuse personalizate, care păstrează valori legate
Enumerări enum Valoare Definește un tip comun pentru un grup de valori legate
Tuples (value1, value2, ...) Valoare Grupează mai multe valori într-un singur tip compus
Clase class Referință Tipuri compuse personalizate, suportând moștenirea și comportament de referință
Funcții () -> Void, (Int) -> String etc. Referință Blocuri de cod executabil
Closures { (parameters) -> return type in code } Referință Blocuri de cod autonome, care pot fi transmise și utilizate
Opționale Type? (sugar sintactic pentru Optional<Type>) Valoare Reprezintă fie o valoare de tip Type, fie absența acesteia (nil)

Alegerea între Tipuri de Valoare și Tipuri de Referință depinde de sarcină: Tipurile de Valoare sunt preferate pentru date mici și pentru siguranța în medii multi-thread, în timp ce Tipurile de Referință sunt pentru obiecte complexe, care necesită stare comună și moștenire.