Διαδρομές
/
Crystal
Crystal
/
Ασκήσεις
/
Τα καταπληκτικά λαζάνια του Ary
Τα καταπληκτικά λαζάνια του Ary

Τα καταπληκτικά λαζάνια του Ary

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

Εισαγωγή

Ξεκινώντας

Μεταβλητές

Για να δηλώσεις μια μεταβλητή, χρησιμοποίησε τον τελεστή ανάθεσης =. Στην Crystal, οι μεταβλητές πρέπει να χρησιμοποιούν τη μορφή snake_case.

number = 1
puts number # => 1

number = 2
puts number # => 2

Σταθερές

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

NUMBER = 1
puts NUMBER # => 1

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

NUMBER = 1

NUMBER = 2
# Error: already initialized constant NUMBER

Τύποι

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

Μέθοδοι

Οι μέθοδοι είναι ένας τρόπος να ομαδοποιήσεις ένα σύνολο εντολών που μπορούν να επαναχρησιμοποιηθούν. Στην Crystal, οι μέθοδοι ορίζονται συχνά μέσα σε μια κλάση, ένα module ή ένα struct. Ωστόσο, οι μέθοδοι μπορούν να οριστούν και έξω από μια κλάση, ένα module ή ένα struct. Οι μέθοδοι δηλώνονται με τη λέξη-κλειδί def, ακολουθούμενη από το όνομα της μεθόδου. Στην Crystal, τα ονόματα των μεθόδων πρέπει να γράφονται σε snake_case. Μπορείς να παραλείψεις τις παρενθέσεις όταν μια μέθοδος δεν έχει ορίσματα. Για να δηλώσεις το τέλος μιας μεθόδου, πρέπει να χρησιμοποιήσεις τη λέξη-κλειδί end.

def hello
  puts "Hello World!"
end

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

number = 1
number + "1"
# Error: no overload matches 'Int32#+' with type String

Ορίσματα

Οι μέθοδοι μπορούν να έχουν ορίσματα. Τα ορίσματα είναι δεδομένα που περνιούνται σε μια μέθοδο. Για να μπορείς να δώσεις ορίσματα σε μια μέθοδο, πρέπει να προσδιορίσεις το όνομα του ορίσματος. Στην Crystal, τα ορίσματα πρέπει να γράφονται σε snake_case. Μια μέθοδος μπορεί να έχει πολλά ορίσματα, αλλά τα ορίσματα πρέπει να χωρίζονται με κόμμα.

def hello(name)
  puts "Hello #{name}!"
end

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

def hello(name, language)
  puts "Hello #{name}! You are learning #{language}."
end

Κλήση μεθόδων

Όταν καλείς μια μέθοδο που ανήκει σε μια κλάση, ένα module ή ένα struct, πρέπει να χρησιμοποιήσεις τον τελεστή τελείας (.). Η μορφή πρέπει να είναι: <ClassName>.<method_name>. Όταν μια μέθοδος δεν ανήκει σε κάποια κλάση, module ή struct, μπορείς απλώς να την καλέσεις γράφοντας το όνομά της. Οι μέθοδοι επιστρέφουν πάντα σιωπηρά την τιμή της τελευταίας έκφρασης.

Όταν μια μέθοδος έχει ορίσματα, μπορείς να χρησιμοποιήσεις παρενθέσεις για να προσδιορίσεις τα ορίσματα στην κλήση και στον ορισμό της μεθόδου, όπως εδώ: <method_name>(<argument_1>, <argument_2>, ...). Όταν μια μέθοδος δεν έχει ορίσματα, οι παρενθέσεις πρέπει να παραλείπονται.

def hello(name)
  "Hello #{name}!"
end

hello("Crystal")
# => Hello Crystal!

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

def hello_language(name, language)
  "Hello #{name}! You are learning #{language}."
end

hello_language("World", "Crystal")
# => Hello World! You are learning Crystal.

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

hello_language("Crystal")
# wrong number of arguments for 'hello_language' (given 1, expected 2)

Πρόσθεση & Αφαίρεση & Πολλαπλασιασμός

Στην Crystal, μπορείς να χρησιμοποιήσεις τον τελεστή + για να προσθέσεις δύο αριθμούς. Μπορείς επίσης να χρησιμοποιήσεις τον τελεστή - για να αφαιρέσεις δύο αριθμούς. Και μπορείς να χρησιμοποιήσεις τον τελεστή * για να πολλαπλασιάσεις δύο αριθμούς.

1 + 1
# => 2

2 - 1
# => 1

2 * 2
# => 4

Σχόλια

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

# This is a comment

Οδηγίες

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

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

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

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

Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40

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

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

Lasagna.new.remaining_minutes_in_oven(30)
# => 10

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

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

Lasagna.new.preparation_time_in_minutes(2)
# => 4

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

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

number_of_layers = 3
actual_minutes_in_oven = 20
Lasagna.new.total_time_in_minutes(number_of_layers, actual_minutes_in_oven)
# => 26
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Crystal Exercism

Έτοιμος να ξεκινήσεις την άσκηση Τα καταπληκτικά λαζάνια του Ary;

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