Μειώστε το αποτύπωμα του κώδικα Rust και αυξήστε την στιβαρότητά του με γενικούς τύπους.

Υπάρχουν πάντα επίπεδα αβεβαιότητας κατά την ανάπτυξη εφαρμογών, τα οποία μπορεί να οδηγήσουν σε σφάλματα, ειδικά εάν οι συναρτήσεις σας δέχονται συγκεκριμένους τύπους ορισμάτων. Για να μειώσετε τα σφάλματα λόγω αβεβαιοτήτων, μπορείτε να χρησιμοποιήσετε το Generics. Τα γενικά παρέχουν λειτουργικότητα για τη δημιουργία κλάσεων, συναρτήσεων και δομών δεδομένων για εργασία με διαφορετικούς τύπους.

Χρησιμοποιώντας γενικά, μπορείτε να δημιουργήσετε και να ορίσετε αλγόριθμους και δομές δεδομένων που μπορούν να λειτουργούν σε πολλούς τύπους χωρίς να γράφετε πολύπλοκο κώδικα και ξεχωριστές υλοποιήσεις για κάθε τύπο. Τα γενόσημα βελτιώνουν την επαναχρησιμοποίηση του κώδικα και την αποτελεσματικότητα, διατηρώντας παράλληλα την ασφάλεια και την απόδοση του τύπου.

Χρήση γενικών τύπων στη σκουριά

Ο γενικός τύπος Rust μπορεί να λειτουργήσει άλλους τύπους δεδομένων Rust. Θα ορίσετε γενικούς τύπους με γωνιακές αγκύλες (<>), ακολουθούμενες από δύο ή περισσότερες παραμέτρους.

Εδώ είναι ένα γενικό ορισμός κατασκευής που παίρνει δύο παραμέτρους γενικού τύπου:

structΣημείο {
// Τα T και U είναι παράμετροι γενικού τύπου που θα κάνουν τα πεδία x και y
// υποθέτω κατά την εγκατάσταση
x: T,
y: U,
}

Στο Σημείο κατασκευή, Τ, και U είναι παράμετροι γενικού τύπου.

Μπορείτε να αντικαταστήσετε τις παραμέτρους γενικού τύπου με οποιονδήποτε τύπο δεδομένων κατά την εγκατάσταση:

στκύριος() {
αφήνω my_point = Σημείο { x: Σειρά::από("Γειά σου"), y: Σειρά::από("κόσμος") };

println!(
"Η τιμή x του my_point είναι {} και η τιμή y είναι {}.",
my_point.x,
my_point.y
);
}

ο η ουσία των λόγων μου η μεταβλητή είναι ένα παράδειγμα του Σημείο η δομή αρχικοποιείται με τύπους συμβολοσειρών. Ο μεταγλωττιστής Rust συνάγει τους συγκεκριμένους τύπους Τ και U με βάση τις τιμές της στιγμιοποίησης.

Όρια χαρακτηριστικών για γενικούς τύπους

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

Τα όρια χαρακτηριστικών καθορίζουν ότι ένας γενικός τύπος πρέπει να εφαρμόσει ένα ή περισσότερα χαρακτηριστικά.

Ακολουθεί ένα παράδειγμα μιας γενικής συνάρτησης που επιστρέφει τη μεγαλύτερη από δύο τιμές με δεσμευμένο χαρακτηριστικό που διασφαλίζει ότι οι τύποι που συγκρίνονται υλοποιούν το χαρακτηριστικό:

// Το μέγιστο είναι ένα χαρακτηριστικό που ορίζει μια μέθοδο για την αξιολόγηση του μέγιστου των δύο
// τύποι
χαρακτηριστικόΑνώτατο όριο {
στΜέγιστη(εαυτός, άλλα: Εαυτός) -> Εαυτός;
}

// Υλοποιεί το χαρακτηριστικό «Μέγιστο» για όλους τους τύπους που υλοποιούν το
// Χαρακτηριστικό «PartialOrd».
υπονοώΜερική Παραγγελία> Μέγιστο Για Τ {
στΜέγιστη(εαυτός, άλλα: Εαυτός) -> Εαυτός {
// επιστρέφει «εαυτό» εάν είναι μεγαλύτερο από το «άλλο». διαφορετικά, επιστρέψτε
// `άλλο.`
ανεαυτός > άλλο {
εαυτός
} αλλού {
άλλα
}
}
}

στκύριος() {
αφήνω α = 5;
αφήνω β = 10;
αφήνω μεγαλύτερο = Μέγιστο:: μέγιστο (a, b);
println!("Η μεγαλύτερη τιμή είναι {}", μεγαλύτερο);
}

ο Ανώτατο όριο γνώρισμα έχει α Μέγιστη μέθοδο που επιστρέφει τη μεγαλύτερη από δύο τιμές του ίδιου τύπου. Οποιοσδήποτε τύπος που υλοποιεί το Μερική Παραγγελία γνώρισμα υλοποιεί το Ανώτατο όριο χαρακτηριστικό.

ο Μέγιστη Η μέθοδος παίρνει δύο τιμές του Εαυτός type—αναφερόμενος στον τύπο που υλοποιεί το Ανώτατο όριο χαρακτηριστικό—και συγκρίνει τις αξίες.

ο κύριος η συνάρτηση συγκρίνει δύο μεταβλητές χρησιμοποιώντας το Μέγιστη μέθοδο και εκτυπώνει το μεγαλύτερο.

Περιορισμοί για γενικούς τύπους

Οι περιορισμοί είναι παρόμοιοι με τα όρια χαρακτηριστικών, αλλά σας επιτρέπουν να καθορίσετε πρόσθετες απαιτήσεις για τους τύπους που χρησιμοποιείτε ως παραμέτρους τύπου.

Εάν θέλετε να δημιουργήσετε μια γενική συνάρτηση που δέχεται τύπους για μετατροπή συμβολοσειρών, μπορείτε να χρησιμοποιήσετε έναν περιορισμό για να διασφαλίσετε ότι η παράμετρος τύπου υλοποιεί ένα χαρακτηριστικό.

// Το ToString είναι ένα χαρακτηριστικό με μέθοδο μετατροπής συμβολοσειράς
χαρακτηριστικόToString {
στto_string(&εαυτός) -> Σειρά;
}

// to_string είναι μια γενική συνάρτηση που παίρνει μια τιμή οποιουδήποτε τύπου
// υλοποιεί το χαρακτηριστικό ToString
στto_stringToString>(τιμή: T) -> Σειρά {
value.to_string()
}

ο to_string Η παράμετρος τιμή πρέπει να υλοποιεί το ToString χαρακτηριστικό, το οποίο διασφαλίζει ότι μπορείτε να μετατρέψετε τιμές τύπου Τ σε χορδή με το to_string μέθοδος.

Οι γενικοί τύποι είναι χρήσιμοι για την εργασία με χαρακτηριστικά

Οι γενικοί τύποι σκουριάς είναι ισχυροί και υπάρχουν τομείς για βελτίωση. Ένας κρίσιμος τομέας εστίασης είναι η βελτίωση της απόδοσης του γενικού κώδικα. Επί του παρόντος, το σύστημα τύπου Rust μπορεί να επιβάλει επιβάρυνση στον γενικό κώδικα, επιβραδύνοντας την απόδοση.

Οι γενικοί τύποι είναι ωφέλιμοι για την εργασία με χαρακτηριστικά. Χρησιμοποιώντας γενικούς τύπους, μπορείτε να δημιουργήσετε αντικείμενα χαρακτηριστικών που λειτουργούν με οποιονδήποτε τύπο εφαρμόζοντας ένα χαρακτηριστικό για να κάνετε τις μεθόδους σας πιο ευέλικτες.