Μυστικά

Μυστικά

Άσκηση εκμάθησης

Εισαγωγή

Ανώνυμες συναρτήσεις

Οι συναρτήσεις αντιμετωπίζονται ως πολίτες πρώτης κατηγορίας στην Elixir. Αυτό σημαίνει ότι:

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

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

Μπορεί να χρησιμοποιήσουμε ανώνυμες συναρτήσεις για να:

  • Κρύψουμε δεδομένα χρησιμοποιώντας λεξιλογικό πεδίο (γνωστό και ως closure).
  • Δημιουργήσουμε δυναμικά συναρτήσεις κατά την εκτέλεση.

Οι ανώνυμες συναρτήσεις ξεκινούν με τη δεσμευμένη λέξη fn, τα ορίσματα χωρίζονται από το σώμα της συνάρτησης με το σύμβολο -> και τελειώνουν με ένα end. Όπως και με τις επώνυμες συναρτήσεις, η τελευταία έκφραση μέσα στη συνάρτηση επιστρέφεται έμμεσα στη συνάρτηση που την κάλεσε.

Για να καλέσεις μια αναφορά συνάρτησης, πρέπει να βάλεις μια . ανάμεσα στη μεταβλητή αναφοράς και τη λίστα των ορισμάτων:

function_variable = fn param ->
  param + 1
end

function_variable.(1)
# => 2

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

variable = &(&1 + 1)

variable.(1)
# => 2

Χειρισμός bit

Η Elixir υποστηρίζει πολλές συναρτήσεις για εργασία με bit, που βρίσκονται στο άρθρωμα Bitwise.

  • band/2: bitwise AND
  • bsl/2: bitwise SHIFT LEFT
  • bsr/2: bitwise SHIFT RIGHT
  • bxor/2: bitwise XOR
  • bor/2: bitwise OR
  • bnot/1: bitwise NOT

Ορίστε ένα παράδειγμα για το πώς να χρησιμοποιήσεις μια συνάρτηση bitwise:

Bitwise.bsl(1, 3)
# => 8

Όλες οι συναρτήσεις bitwise λειτουργούν μόνο με ακέραιους αριθμούς.

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

Οδηγίες

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

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

Όλες οι συναρτήσεις πρέπει να δέχονται ακέραια ορίσματα. Οι ακέραιοι είναι επίσης κατάλληλοι για την εκτέλεση πράξεων bitwise στην Elixir.

1. Δημιούργησε έναν αθροιστή

Υλοποίησε τη Secrets.secret_add/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και προσθέτει σε αυτό το όρισμα που πέρασες στη secret_add.

adder = Secrets.secret_add(3)
adder.(2)
# => 5

2. Δημιούργησε έναν αφαιρέτη

Υλοποίησε τη Secrets.secret_subtract/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και αφαιρεί από αυτό το όρισμα το μυστικό που πέρασες στη secret_subtract.

subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1

3. Δημιούργησε έναν πολλαπλασιαστή

Υλοποίησε τη Secrets.secret_multiply/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και το πολλαπλασιάζει με το μυστικό που πέρασες στη secret_multiply.

multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21

4. Δημιούργησε έναν διαιρέτη

Υλοποίησε τη Secrets.secret_divide/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και το διαιρεί με το μυστικό που πέρασες στη secret_divide.

divider = Secrets.secret_divide(3)
divider.(32)
# => 10

Χρησιμοποίησε ακέραια διαίρεση ώστε η έξοδος να είναι συμβατή με την αναμενόμενη είσοδο των άλλων συναρτήσεων.

5. Δημιούργησε μια συνάρτηση "and"

Υλοποίησε τη Secrets.secret_and/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και εκτελεί μια bitwise πράξη and σε αυτό και στο μυστικό που πέρασες στη secret_and.

ander = Secrets.secret_and(1)
ander.(2)
# => 0

6. Δημιούργησε μια συνάρτηση "xor"

Υλοποίησε τη Secrets.secret_xor/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και εκτελεί μια bitwise πράξη xor σε αυτό και στο μυστικό που πέρασες στη secret_xor.

xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2

7. Δημιούργησε έναν συνδυαστή συναρτήσεων

Υλοποίησε τη Secrets.secret_combine/2. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και εφαρμόζει σε αυτό τις δύο συναρτήσεις που πέρασες στη secret_combine με τη σειρά.

add_one = Secrets.secret_add(1)
multiply_by_2 = Secrets.secret_multiply(2)
combined = Secrets.secret_combine(add_one, multiply_by_2)

combined.(3)
# => 8
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Elixir Exercism

Έτοιμος να ξεκινήσεις την άσκηση Μυστικά;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.