Sobes.tech
Intern

Co jsou datové typy a jaké existují?

sobes.tech AI

Odpověď od AI

Datové typy určují sadu možných hodnot a operací, které na nich lze provádět. V Swift jsou rozděleny na hodnotové typy a referenční typy.

Hodnotové typy:

  • Hodnoty se při přiřazení nebo předání funkci kopírují.
  • Každá proměnná nebo konstanta uchovává vlastní nezávislou kopii dat.
  • Změny v jedné kopii neovlivňují ostatní.

Příklady hodnotových typů:

  • Struktury (struct)
  • Enum (enum)
  • Tuple (tuple)
  • Základní typy: Int, Double, Bool, String, pole (Array), slovníky (Dictionary), množiny (Set).
// Příklad hodnotového typu: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 dostává kopii p1
p2.x = 10 // Změna p2 neovlivní p1

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

Referenční typy:

  • Hodnoty se nekopírují. Při přiřazení nebo předání
  • funkci se předává odkaz na stejnou instanci dat v paměti.
  • Několik proměnných nebo konstant může odkazovat na stejnou instanci.
  • Změny přes jeden odkaz jsou viditelné přes všechny ostatní.

Příklady referenčních typů:

  • Třídy (class)
  • Funkce (func)
  • Uzávěry (closure)
// Příklad referenčního typu: class
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 odkazuje na stejnou instanci jako c1
c2.radius = 10.0 // Změna c2 ovlivní c1

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

Tabulka hlavních typů:

Kategorie Typ(y) Hodnotový/Referenční typ Popis
Celá čísla Int, UInt, Int8, UInt8 atd. Hodnotový Celá čísla různých velikostí, se znaménkem a bez něj
Plovoucí desetinná čísla Float, Double Hodnotový Čísla s desetinnou částí
Logické hodnoty Bool Hodnotový Logické hodnoty (true nebo false)
Řetězce String Hodnotový Sekvence znaků
Kolekce Array, Dictionary, Set Hodnotový Seřazené/nesřazené kolekce stejných typů prvků
Struktury struct Hodnotový Složené uživatelské typy, obsahující související hodnoty
Enumy enum Hodnotový Definují společný typ pro skupinu souvisejících hodnot
Tupley (value1, value2, ...) Hodnotový Skupiny několika hodnot do jednoho složeného typu
Třídy class Referenční Složené uživatelské typy podporující dědičnost a referenční chování
Funkce () -> Void, (Int) -> String atd. Referenční Bloky vykonatelného kódu
Uzávěry { (parameters) -> return type in code } Referenční Samostatné bloky kódu, které lze předat a použít
Volitelné Type? (syntaktický cukr pro Optional<Type>) Hodnotový Představuje buď hodnotu typu Type, nebo její absenci (nil)

Volba mezi hodnotovými a referenčními typy závisí na úkolu: hodnotové typy jsou vhodnější pro malé údaje a bezpečnost vláken, referenční typy pro složité objekty vyžadující sdílený stav a dědičnost.