Λαζάνια

Λαζάνια

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

Εισαγωγή

Τα βασικά

Μεταβλητές

Η Elixir είναι μια γλώσσα με δυναμικούς τύπους, που σημαίνει ότι ο τύπος μιας μεταβλητής ελέγχεται μόνο κατά την εκτέλεση. Χρησιμοποιώντας τον τελεστή αντιστοίχισης =, μπορούμε να δεσμεύσουμε μια τιμή οποιουδήποτε τύπου σε ένα όνομα μεταβλητής:

# Bound an integer value of 1
count = 1
# You may re-bind variables
count = 2

# You may re-bind any type to a variable
count = false

# Strings can be created by enclosing characters within double quotes
message = "Success!"

Αρθρώματα

Η Elixir είναι μια γλώσσα συναρτησιακού προγραμματισμού και απαιτεί όλες οι συναρτήσεις με όνομα να ορίζονται μέσα σε ένα άρθρωμα. Η λέξη-κλειδί defmodule χρησιμοποιείται για να ορίσεις ένα άρθρωμα. Όλα τα αρθρώματα είναι διαθέσιμα σε όλα τα άλλα αρθρώματα κατά την εκτέλεση και δεν χρειάζονται τροποποιητή πρόσβασης για να γίνουν ορατά σε άλλα μέρη του προγράμματος. Ένα άρθρωμα είναι ανάλογο με μια κλάση σε άλλες γλώσσες προγραμματισμού.

defmodule Calculator do
  # ...
end

Συναρτήσεις με όνομα

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

Κάθε συνάρτηση μπορεί να έχει μηδέν ή περισσότερα ορίσματα. Η τιμή της τελευταίας έκφρασης σε μια συνάρτηση επιστρέφεται πάντα έμμεσα.

defmodule Calculator do
  def add(x, y) do
    x + y
  end
end

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

sum = Calculator.add(1, 2)
# => 3

Η λέξη-κλειδί defp μπορεί να χρησιμοποιηθεί αντί για def για να ορίσεις μια ιδιωτική συνάρτηση. Οι ιδιωτικές συναρτήσεις μπορούν να χρησιμοποιηθούν μόνο μέσα από το ίδιο άρθρωμα που τις όρισε.

Όταν καλείς μια συνάρτηση μέσα στο ίδιο άρθρωμα όπου έχει οριστεί, μπορείς να παραλείψεις το όνομα του αρθρώματος.

Μπορείς επίσης να γράψεις σύντομες συναρτήσεις με σύνταξη μιας γραμμής (πρόσεξε το κόμμα , και την άνω και κάτω τελεία : γύρω από τη λέξη-κλειδί do).

defmodule Calculator do
  def subtract(x, y) do
    private_subtract(x, y)
  end

  defp private_subtract(x, y), do: x - y
end

difference = Calculator.subtract(7, 2)
# => 5

difference = Calculator.private_subtract(7, 2)
# => ** (UndefinedFunctionError) function Calculator.private_subtract/2 is undefined or private
#       Calculator.private_subtract(7, 2)

Ο αριθμός ορισμάτων των συναρτήσεων

Συνηθίζεται να αναφερόμαστε στις συναρτήσεις με τον αριθμό ορισμάτων τους. Ο αριθμός ορισμάτων μιας συνάρτησης είναι το πλήθος των ορισμάτων που δέχεται.

# add/3 because this function has three arguments, thus an arity of 3
def add(x, y, z) do
  x + y + z
end

Συμβάσεις ονοματοδοσίας

Τα ονόματα των αρθρωμάτων πρέπει να χρησιμοποιούν PascalCase. Το όνομα ενός αρθρώματος πρέπει να ξεκινά με κεφαλαίο γράμμα A-Z και μπορεί να περιέχει γράμματα a-zA-Z, αριθμούς 0-9 και κάτω παύλες _.

Τα ονόματα μεταβλητών και συναρτήσεων πρέπει να χρησιμοποιούν snake_case. Το όνομα μιας μεταβλητής ή συνάρτησης πρέπει να ξεκινά με πεζό γράμμα a-z ή κάτω παύλα _, μπορεί να περιέχει γράμματα a-zA-Z, αριθμούς 0-9 και κάτω παύλες _, και μπορεί να τελειώνει με ερωτηματικό ? ή θαυμαστικό !.

Πρότυπη βιβλιοθήκη

Η Elixir έχει μια πολύ πλούσια και καλά τεκμηριωμένη πρότυπη βιβλιοθήκη. Η τεκμηρίωση είναι διαθέσιμη online στο hexdocs.pm/elixir. Αποθήκευσε αυτόν τον σύνδεσμο κάπου, θα τον χρησιμοποιήσεις πολύ!

Οι περισσότεροι ενσωματωμένοι τύποι δεδομένων έχουν ένα αντίστοιχο άρθρωμα που προσφέρει συναρτήσεις για να δουλεύεις με αυτόν τον τύπο δεδομένων, π.χ. υπάρχει το άρθρωμα Integer για τους ακέραιους, το άρθρωμα String για τις συμβολοσειρές, το άρθρωμα List για τις λίστες και ούτω καθεξής.

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

Σχόλια στον κώδικα

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

Οδηγίες

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

Έχεις πέντε εργασίες, όλες σχετικές με τον χρόνο που χρειάζεται για το μαγείρεμα της λαζάνιας.

1. Όρισε τον αναμενόμενο χρόνο ψησίματος σε λεπτά

Όρισε τη συνάρτηση Lasagna.expected_minutes_in_oven/0, η οποία δεν παίρνει κανένα όρισμα και επιστρέφει πόσα λεπτά πρέπει να μείνει η λαζάνια στον φούρνο. Σύμφωνα με το βιβλίο μαγειρικής, ο αναμενόμενος χρόνος ψησίματος σε λεπτά είναι 40:

Lasagna.expected_minutes_in_oven()
# => 40

2. Υπολόγισε τον χρόνο ψησίματος που απομένει σε λεπτά

Όρισε τη συνάρτηση Lasagna.remaining_minutes_in_oven/1, η οποία παίρνει ως όρισμα τα πραγματικά λεπτά που βρίσκεται η λαζάνια στον φούρνο και επιστρέφει πόσα λεπτά πρέπει ακόμα να μείνει η λαζάνια στον φούρνο, με βάση τον αναμενόμενο χρόνο ψησίματος σε λεπτά από την προηγούμενη εργασία.

Lasagna.remaining_minutes_in_oven(30)
# => 10

3. Υπολόγισε τον χρόνο προετοιμασίας σε λεπτά

Όρισε τη συνάρτηση Lasagna.preparation_time_in_minutes/1, η οποία παίρνει ως όρισμα τον αριθμό των στρώσεων που πρόσθεσες στη λαζάνια και επιστρέφει πόσα λεπτά χρειάστηκες για να προετοιμάσεις τη λαζάνια, υποθέτοντας ότι κάθε στρώση σού παίρνει 2 λεπτά.

Lasagna.preparation_time_in_minutes(2)
# => 4

4. Υπολόγισε τον συνολικό χρόνο εργασίας σε λεπτά

Όρισε τη συνάρτηση Lasagna.total_time_in_minutes/2, η οποία παίρνει δύο ορίσματα: το πρώτο όρισμα είναι ο αριθμός των στρώσεων που πρόσθεσες στη λαζάνια και το δεύτερο όρισμα είναι ο αριθμός των λεπτών που βρίσκεται η λαζάνια στον φούρνο. Η συνάρτηση πρέπει να επιστρέφει πόσα λεπτά συνολικά έχεις δουλέψει για το μαγείρεμα της λαζάνιας, δηλαδή το άθροισμα του χρόνου προετοιμασίας σε λεπτά και του χρόνου σε λεπτά που έχει περάσει η λαζάνια στον φούρνο αυτή τη στιγμή.

Lasagna.total_time_in_minutes(3, 20)
# => 26

5. Δημιούργησε μια ειδοποίηση ότι η λαζάνια είναι έτοιμη

Όρισε τη συνάρτηση Lasagna.alarm/0, η οποία δεν παίρνει κανένα όρισμα και επιστρέφει ένα μήνυμα που δείχνει ότι η λαζάνια είναι έτοιμη για φάγωμα.

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

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

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