Sobes.tech
Intern

Cosa sono i tipi di dati e quali esistono?

sobes.tech AI

Risposta dell'AI

I tipi di dati definiscono l'insieme dei valori possibili e le operazioni che possono essere eseguite su di essi. In Swift, sono divisi in Tipi di Valore e Tipi di Riferimento.

Tipi di Valore:

  • I valori vengono copiati durante l'assegnazione o il passaggio a una funzione.
  • Ogni variabile o costante memorizza una propria copia indipendente dei dati.
  • Le modifiche a una copia non influenzano le altre.

Esempi di Tipi di Valore:

  • Strutture (struct)
  • Enumerazioni (enum)
  • Tuple (tuple)
  • Tipi di base: Int, Double, Bool, String, array (Array), dizionari (Dictionary), set (Set).
// Esempio di Tipo di Valore: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 ottiene una copia di p1
p2.x = 10 // La modifica di p2 non influisce su p1

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

Tipi di Riferimento:

  • I valori non vengono copiati. Durante l'assegnazione o il passaggio
  • viene passata una referenza allo stesso esempio di dati in memoria.
  • Variabili o costanti multiple possono riferirsi allo stesso esempio.
  • Le modifiche tramite una referenza sono visibili in tutte le altre.

Esempi di Tipi di Riferimento:

  • Classi (class)
  • Funzioni (func)
  • Chiusure (closure)
// Esempio di Tipo di Riferimento: class
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 si riferisce allo stesso esempio di c1
c2.radius = 10.0 // La modifica di c2 influisce su c1

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

Tabella dei tipi principali:

Categoria Tipo(i) Tipo di Valore/Riferimento Descrizione
Numeri interi Int, UInt, Int8, UInt8, ecc. Valore Numeri interi di diverse dimensioni, con o senza segno
Numeri in virgola mobile Float, Double Valore Numeri con parte frazionaria
Booleani Bool Valore Valori logici (true o false)
Stringhe String Valore Sequenza di caratteri
Collezioni Array, Dictionary, Set Valore Collezioni ordinate/non ordinate di elementi dello stesso tipo
Strutture struct Valore Tipi composti definiti dall'utente che memorizzano valori correlati
Enumerazioni enum Valore Definiscono un tipo comune per un gruppo di valori correlati
Tuple (value1, value2, ...) Valore Raggruppano più valori in un unico tipo composto
Classi class Riferimento Tipi composti definiti dall'utente che supportano ereditarietà e comportamento per riferimento
Funzioni () -> Void, (Int) -> String ecc. Riferimento Blocchi di codice eseguibili
Chiusure { (parameters) -> return type in code } Riferimento Blocchi di codice autonomi che possono essere passati e usati
Opzionali Type? (sugar sintattico per Optional<Type>) Valore Rappresenta un valore di tipo Type o la sua assenza (nil)

La scelta tra Tipi di Valore e Tipi di Riferimento dipende dal compito: i Tipi di Valore sono preferibili per dati piccoli e per garantire la sicurezza in multithreading, i Tipi di Riferimento sono adatti per oggetti complessi che richiedono stato condiviso e ereditarietà.