Η βασική βιβλιοθήκη της Cairo υλοποιεί έναν τύπο Array.
Μοιάζει με τους συνηθισμένους τύπους πίνακα που συναντάς σε άλλες γλώσσες προγραμματισμού, αλλά έχει μερικές βασικές διαφορές:
Array, και μπορούν να αφαιρεθούν αποδοτικά μόνο από το μπροστινό μέρος.Οι πίνακες μπορούν να δημιουργηθούν χρησιμοποιώντας τη συνάρτηση ArrayTrait::new καθώς και το μάκρο array!:
let empty: Array<u32> = ArrayTrait::new();
let one_to_four = array![1, 2, 3, 4];
Τα στοιχεία μπορούν να προστεθούν στον πίνακα χρησιμοποιώντας τη συνάρτηση ArrayTrait::append:
let mut num_array = array![1, 2, 3, 4];
num_array.append(5);
// -> [1, 2, 3, 4, 5]
Τα στοιχεία μπορούν να αφαιρεθούν από τον πίνακα χρησιμοποιώντας τη συνάρτηση ArrayTrait::pop_front:
let mut one_to_four = array![1, 2, 3, 4];
one_to_four.pop_front();
// -> [2, 3, 4]
Η Cairo εισάγει επίσης έναν τύπο Span που λειτουργεί σαν ένα "στιγμιότυπο" του Array.
Κάθε Array μπορεί να μετατραπεί σε Span με τη συνάρτηση ToSpanTrait::span:
let one_to_four = array![1, 2, 3, 4];
let one_to_four_span = one_to_four.span();
// -> [1, 2, 3, 4]
Η μετατροπή ενός πίνακα σε Span είναι πολύ αποδοτική, καθώς το Span είναι απλώς μια δομή δεδομένων που επιτρέπει στην Cairo να "δει" ένα τμήμα του πίνακα, χωρίς να το τροποποιεί με κανέναν τρόπο.
Μετατρέποντας έναν πίνακα σε Span, η Cairo επιτρέπει να εκτελεστούν περισσότερες λειτουργίες από όσες θα επιτρέπονταν απευθείας σε ένα Array, όπως η αφαίρεση ενός στοιχείου από το μπροστινό μέρος του span.
let one_to_four = array![1, 2, 3, 4];
let mut one_to_four_span = one_to_four.span();
one_to_four_span.pop_back();
// -> [2, 3, 4]
Σημείωσε ότι έπρεπε να κάνουμε το one_to_four_span μεταβλητό με τη λέξη-κλειδί mut για να καλέσουμε το pop_back, το οποίο μεταβάλλει το span συντομεύοντας το τμήμα του πίνακα που "βλέπει" το span.
Ως μελλοντική μάγισσα, η Elyse χρειάζεται να εξασκηθεί στα βασικά.
Έχει μια στοίβα από κάρτες που θέλει να χειριστεί.
Για να κάνει τα πράγματα λίγο πιο εύκολα, χρησιμοποιεί μόνο τις κάρτες 1 έως 10.
Η στοίβα των καρτών αναπαρίσταται από έναν Array, με τη βάση της στοίβας στο μπροστινό μέρος του πίνακα και την κορυφή της στοίβας στο πίσω μέρος.
Υλοποίησε τη συνάρτηση insert_top που επιστρέφει ένα αντίγραφο της στοίβας όπου η νέα κάρτα που δίνεται έχει προστεθεί στην κορυφή.
let stack = array![5, 9, 7, 1];
insert_top(stack, 8);
// -> [5, 9, 7, 1, 8]
Υλοποίησε τη συνάρτηση remove_top_card που επιστρέφει ένα αντίγραφο της στοίβας, από το οποίο έχει αφαιρεθεί η κάρτα στην κορυφή.
Αν η στοίβα που δίνεται είναι κενή, θα πρέπει να επιστραφεί η αρχική στοίβα, χωρίς αλλαγές.
let stack = array![3, 2, 6, 4, 8];
remove_top_card(stack);
// -> [3, 2, 6, 4]
Υλοποίησε τη συνάρτηση insert_bottom που επιστρέφει ένα αντίγραφο της στοίβας όπου η νέα κάρτα που δίνεται έχει προστεθεί στη βάση της στοίβας.
let stack = array![5, 9, 7, 1];
insert_bottom(stack, 8);
// -> [8, 5, 9, 7, 1]
Υλοποίησε τη συνάρτηση remove_bottom_card που επιστρέφει ένα αντίγραφο της στοίβας, από το οποίο έχει αφαιρεθεί η κάρτα στη βάση.
Αν η στοίβα που δίνεται είναι κενή, θα πρέπει να επιστραφεί η αρχική στοίβα, χωρίς αλλαγές.
let stack = array![8, 5, 9, 7, 1];
remove_bottom_card(stack);
// -> [5, 9, 7, 1]
Υλοποίησε τη συνάρτηση check_size_of_stack που ελέγχει αν το μέγεθος της στοίβας είναι ίσο με μια δεδομένη τιμή stack_size ή όχι.
let stack = array![3, 2, 6, 4, 8];
check_size_of_stack(stack, 4);
// -> false
Για να καταλάβεις γιατί η εργασία με πίνακες στη Cairo δεν είναι τόσο απλή όσο σε άλλες γλώσσες προγραμματισμού, είναι χρήσιμο να έχεις υπόψη σου ότι η Cairo χρησιμοποιεί ένα αμετάβλητο μοντέλο μνήμης, που σημαίνει ότι μόλις γραφτεί ένα κύτταρο μνήμης, δεν μπορεί ποτέ να ξαναγραφτεί, παρά μόνο να διαβαστεί.
Η γλώσσα κρύβει κάπως αυτό το χαρακτηριστικό, επιτρέποντας στους προγραμματιστές να δηλώνουν και να χρησιμοποιούν τις μεταβλητές τους σαν να μπορούν να τις αλλάξουν.
Αν και αυτό κάνει τη συγγραφή κώδικα λίγο πιο δύσκολη, ειδικά τον κώδικα που χρησιμοποιεί τον τύπο Array (συμπεριλαμβανομένου του ByteArray, ο οποίος στην ουσία είναι ένας "πίνακας από bytes"), επιτρέπει τη συγγραφή αποδείξιμων προγραμμάτων που μπορούν να εκτελεστούν με σιγουριά ακόμη και σε μη αξιόπιστα μηχανήματα, κάτι που κάνει τον συμβιβασμό να αξίζει με το παραπάνω.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Cairo με 25 έννοιες68 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.