Sobes.tech
Intern

Τι είναι οι τύποι δεδομένων και ποιοι υπάρχουν;

sobes.tech AI

Απάντηση από AI

Οι τύποι δεδομένων καθορίζουν το σύνολο των πιθανών τιμών και τις λειτουργίες που μπορούν να εκτελεστούν πάνω τους. Στο Swift, χωρίζονται σε Τύπους Αξίας και Τύπους Αναφοράς.

Τύποι Αξίας:

  • Οι τιμές αντιγράφονται κατά την ανάθεση ή την μεταβίβαση σε μια συνάρτηση.
  • Κάθε μεταβλητή ή σταθερά διατηρεί ένα ανεξάρτητο αντίγραφο των δεδομένων.
  • Οι αλλαγές σε ένα αντίγραφο δεν επηρεάζουν τα άλλα.

Παραδείγματα Τύπων Αξίας:

  • Δομές (struct)
  • Enum (enum)
  • Τυπώματα (tuple)
  • Βασικοί τύποι: Int, Double, Bool, String, πίνακες (Array), λεξικά (Dictionary), σύνολα (Set).
// Παράδειγμα Τύπου Αξίας: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // το p2 λαμβάνει ένα αντίγραφο του p1
p2.x = 10 // Η αλλαγή στο p2 δεν επηρεάζει το p1

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

Τύποι Αναφοράς:

  • Οι τιμές δεν αντιγράφονται. Κατά την ανάθεση ή τη μεταβίβαση
  • σε μια συνάρτηση, περνάει μια αναφορά στην ίδια την παρουσία δεδομένων στη μνήμη.
  • Πολλές μεταβλητές ή σταθερές μπορούν να αναφέρονται στην ίδια παρουσία.
  • Οι αλλαγές μέσω μιας αναφοράς είναι ορατές σε όλες τις άλλες.

Παραδείγματα Τύπων Αναφοράς:

  • Κλάσεις (class)
  • Συναρτήσεις (func)
  • Κλείσιμο (closure)
// Παράδειγμα Τύπου Αναφοράς: class
class Circle {
    var radius: Double

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

var c1 = Circle(radius: 5.0)
var c2 = c1 // το c2 αναφέρεται στην ίδια παρουσία με το c1
c2.radius = 10.0 // Η αλλαγή στο c2 επηρεάζει και το c1

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

Πίνακας με βασικούς τύπους:

Κατηγορία Τύπος(οι) Τύπος Αξίας/Αναφοράς Περιγραφή
Ακέραιοι Int, UInt, Int8, UInt8 κ.ά. Αξία Ακέραιοι αριθμοί διαφόρων μεγεθών, με και χωρίς πρόσημο
Πλωτοί αριθμοί Float, Double Αξία Αριθμοί με δεκαδικό μέρος
Boolean Bool Αξία Λογικές τιμές (true ή false)
Συμβολοσειρές String Αξία Ακολουθία χαρακτήρων
Συλλογές Array, Dictionary, Set Αξία Ταξινομημένες/μη ταξινομημένες συλλογές ομοειδών στοιχείων
Δομές struct Αξία Σύνθετοι τύποι που αποθηκεύουν σχετικές τιμές
Enum enum Αξία Ορίζουν γενικό τύπο για ομάδα σχετικών τιμών
Τυπώματα (value1, value2, ...) Αξία Ομαδοποιούν πολλαπλές τιμές σε έναν σύνθετο τύπο
Κλάσεις class Αναφορά Σύνθετοι τύποι που υποστηρίζουν κληρονομικότητα και συμπεριφορά αναφοράς
Συναρτήσεις () -> Void, (Int) -> String κ.ά. Αναφορά Μπλοκ κώδικα που εκτελείται
Κλείσιμο { (parameters) -> return type in code } Αναφορά Αυτόνομα μπλοκ κώδικα που μπορούν να μεταβιβαστούν και να χρησιμοποιηθούν
Επιλογείς Type? (συντακτική ζάχαρη για Optional<Type>) Αξία Αντιπροσωπεύει είτε μια τιμή τύπου Type, είτε την απουσία της (nil)

Η επιλογή μεταξύ Τύπων Αξίας και Τύπων Αναφοράς εξαρτάται από την εργασία: Οι Τύποι Αξίας προτιμώνται για μικρά δεδομένα και ασφάλεια νημάτων, οι Τύποι Αναφοράς για πολύπλοκα αντικείμενα που απαιτούν κοινή κατάσταση και κληρονομικότητα.