Στην Elixir, για να επιλέξουμε ένα τυχαίο στοιχείο από μια απαριθμήσιμη δομή δεδομένων (π.χ. λίστα, διάστημα), χρησιμοποιούμε τη συνάρτηση Enum.random. Αυτή η συνάρτηση επιλέγει ένα μόνο στοιχείο, με κάθε στοιχείο να έχει ίση πιθανότητα να επιλεγεί.
Η Elixir δεν έχει δικές της συναρτήσεις για την επιλογή ενός τυχαίου δεκαδικού αριθμού. Για να το κάνουμε αυτό, πρέπει να χρησιμοποιήσουμε απευθείας την Erlang.
Ο κώδικας της Elixir εκτελείται στην εικονική μηχανή BEAM. Η BEAM είναι μέρος του Erlang Run-Time System. Εμπνευσμένη από την Erlang και μοιραζόμενη το περιβάλλον εκτέλεσής της, η Elixir προσφέρει εξαιρετική διαλειτουργικότητα με τις βιβλιοθήκες της Erlang. Αυτό σημαίνει ότι οι προγραμματιστές Elixir μπορούν να χρησιμοποιούν βιβλιοθήκες της Erlang μέσα από τον κώδικα Elixir τους. Στην πραγματικότητα, η κοινότητα της Elixir αποθαρρύνει τη συγγραφή βιβλιοθηκών Elixir για λειτουργικότητα που παρέχεται ήδη από βιβλιοθήκες της Erlang.
Ως αποτέλεσμα, ορισμένες λειτουργίες, όπως οι μαθηματικές πράξεις ή οι συναρτήσεις χρονισμού, είναι διαθέσιμες στην Elixir μόνο μέσω της Erlang.
Η πρότυπη βιβλιοθήκη της Erlang είναι διαθέσιμη για χρήση στον κώδικα Elixir μας, χωρίς να χρειάζεται κανένα επιπλέον βήμα.
Οι συναρτήσεις της Erlang καλούνται με τον ίδιο τρόπο που καλούμε τις συναρτήσεις της Elixir, με μία μικρή διαφορά. Τα ονόματα των module στην Erlang είναι άτομα snake_case. Για παράδειγμα, για να καλέσεις τη συνάρτηση pi/0 της Erlang από το module math, θα έγραφες:
:math.pi()
# => 3.141592653589793
Οι πιο συχνά χρησιμοποιούμενες συναρτήσεις της Erlang που δεν έχουν αντίστοιχη στην Elixir είναι:
:timer.sleep/1, που αναστέλλει μια διεργασία για τον δεδομένο αριθμό χιλιοστών του δευτερολέπτου.:rand.uniform/0, που παράγει έναν τυχαίο δεκαδικό αριθμό x, όπου 0.0 <= x < 1.0.:io_lib.format/2, που παρέχει μορφοποίηση συμβολοσειρών σε στυλ C (με ακολουθίες ελέγχου). Χρησιμοποιώντας αυτή τη συνάρτηση, θα μπορούσαμε για παράδειγμα να εκτυπώσουμε έναν ακέραιο σε οποιαδήποτε βάση από το 2 έως το 36 ή να μορφοποιήσουμε έναν δεκαδικό αριθμό με την επιθυμητή ακρίβεια. Σημείωσε ότι αυτή η συνάρτηση, όπως πολλές συναρτήσεις της Erlang, επιστρέφει μια λίστα χαρακτήρων.math, που παρέχει μαθηματικές συναρτήσεις όπως sin/1, cos/1, log2/1, log10/1, pow/2 και άλλες.Για να ανακαλύψεις την πρότυπη βιβλιοθήκη της Erlang, εξερεύνησε το STDLIB Reference Manual.
Η Μαίρη είναι μεγάλη φαν της τηλεοπτικής σειράς Star Trek: The Next Generation. Παίζει συχνά παιχνίδια ρόλων με χαρτί και μολύβι, όπου αυτή και οι φίλοι της υποδύονται το πλήρωμα του Starship Enterprise. Ο χαρακτήρας της Μαίρης είναι ο Πλοίαρχος Πικάρ, που σημαίνει ότι πρέπει να κρατάει το ημερολόγιο του πλοιάρχου. Αγαπάει το δημιουργικό κομμάτι του παιχνιδιού, αλλά δεν της αρέσει να βγάζει τυχαία δεδομένα επιτόπου.
Βοήθησε τη Μαίρη φτιάχνοντας γεννήτριες τυχαίων δεδομένων για όσα εμφανίζονται συχνά στο ημερολόγιο του πλοιάρχου.
Το Starship Enterprise συναντά πολλούς πλανήτες στα ταξίδια του. Οι πλανήτες στο σύμπαν του Star Trek χωρίζονται σε κατηγορίες με βάση τις ιδιότητές τους. Για παράδειγμα, η Γη είναι πλανήτης κλάσης M. Όλες οι πιθανές κλάσεις πλανητών είναι: D, H, J, K, L, M, N, R, T και Y.
Υλοποίησε τη συνάρτηση random_planet_class/0. Θα πρέπει να επιστρέφει τυχαία μία από τις κλάσεις πλανητών.
CaptainsLog.random_planet_class()
# => "K"
Το Enterprise (αριθμός νηολογίου NCC-1701) δεν είναι το μόνο διαστημόπλοιο που πετάει εκεί έξω! Όταν συναντάει ένα άλλο διαστημόπλοιο, η Μαίρη χρειάζεται να καταγράψει τον αριθμό νηολογίου του.
Οι αριθμοί νηολογίου ξεκινούν με το πρόθεμα "NCC-" και στη συνέχεια χρησιμοποιούν έναν αριθμό από το 1000 έως το 9999 (συμπεριλαμβανομένων).
Υλοποίησε τη συνάρτηση random_ship_registry_number/0, που επιστρέφει έναν τυχαίο αριθμό νηολογίου διαστημοπλοίου.
CaptainsLog.random_ship_registry_number()
# => "NCC-1947"
Τι νόημα έχει ένα ημερολόγιο αν δεν περιλαμβάνει ημερομηνίες;
Η αστρική ημερομηνία είναι ένας αριθμός κινητής υποδιαστολής. Οι περιπέτειες του Starship Enterprise από την πρώτη σεζόν του The Next Generation διαδραματίζονται μεταξύ των αστρικών ημερομηνιών 41000.0 και 42000.0. Το "4" αντιστοιχεί στον 24ο αιώνα και το "1" στην πρώτη σεζόν.
Υλοποίησε τη συνάρτηση random_stardate/0, που επιστρέφει έναν αριθμό κινητής υποδιαστολής μεταξύ 41000.0 (συμπεριλαμβανομένου) και 42000.0 (μη συμπεριλαμβανομένου).
Η υλοποίηση θα πρέπει να χρησιμοποιεί συνάρτηση της Erlang.
CaptainsLog.random_stardate()
# => 41458.15721310934
Στο ημερολόγιο του πλοιάρχου, οι αστρικές ημερομηνίες συνήθως στρογγυλοποιούνται σε ένα δεκαδικό ψηφίο.
Υλοποίησε τη συνάρτηση format_stardate/1, που θα παίρνει έναν αριθμό κινητής υποδιαστολής και θα επιστρέφει μια συμβολοσειρά με τον αριθμό στρογγυλοποιημένο σε ένα δεκαδικό ψηφίο.
Η υλοποίηση θα πρέπει να χρησιμοποιεί συνάρτηση της Erlang.
CaptainsLog.format_stardate(41458.15721310934)
# => "41458.2"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.