Αυτή η άσκηση θα σου μάθει τα θεμελιώδη δομικά στοιχεία της Ruby. Καλύπτει πολύ έδαφος, αλλά μην ανησυχείς αν σου φανεί υπερβολικό, θα εμβαθύνουμε σε όλα πολύ περισσότερο καθώς προχωράμε στη διαδρομή.
Ένα από τα βασικά πράγματα που πρέπει να καταλάβεις για τη Ruby είναι ότι είναι μια αντικειμενοστρεφής γλώσσα και ότι τα πάντα στη Ruby είναι αντικείμενα. Αριθμοί, συμβολοσειρές, πίνακες: όλα τους είναι αντικείμενα.
Συνήθως χρησιμοποιούμε τα αντικείμενα δίνοντάς τους ονόματα, είτε με μεταβλητές είτε με σταθερές.
Οι μεταβλητές γράφονται πάντα σε snake case.
Μια μεταβλητή μπορεί να αναφέρεται σε διαφορετικά αντικείμενα κατά τη διάρκεια της ζωής της.
Για παράδειγμα, η my_first_variable μπορεί να οριστεί και να επαναοριστεί πολλές φορές με τον τελεστή =:
my_first_variable = 1
my_first_variable = "Some string"
my_first_variable = SomeComplexObject.new
Οι σταθερές, ωστόσο, προορίζονται να πάρουν τιμή μία μόνο φορά. Πρέπει να ξεκινούν με κεφαλαίο γράμμα και συνήθως γράφονται με κεφαλαία, με τις λέξεις χωρισμένες με κάτω παύλες. Για παράδειγμα:
MY_FIRST_CONSTANT = 10
# Redefining not allowed
# MY_FIRST_CONSTANT = "Some String"
Η Ruby οργανώνεται σε κλάσεις.
Οι κλάσεις ορίζονται με τη λέξη-κλειδί class ακολουθούμενη από το όνομα της κλάσης.
Τα αντικείμενα δημιουργούνται συνήθως με στιγμιοποίηση κλάσεων μέσω της μεθόδου .new.
Για παράδειγμα:
# Define the class
class Calculator
#...
end
# Create an instance of it and assign it to a variable
my_first_calc = Calculator.new
Οι μονάδες λειτουργικότητας ενσωματώνονται σε μεθόδους, παρόμοιες με τις συναρτήσεις σε άλλες γλώσσες.
Μια μέθοδος μπορεί να οριστεί με ορίσματα θέσης, ορίσματα με λέξεις-κλειδιά (που ορίζονται και καλούνται με τη σύνταξη :), ή να μην έχει καθόλου ορίσματα.
Οι μέθοδοι είτε επιστρέφουν σιωπηρά το αποτέλεσμα της τελευταίας εντολής που αξιολογήθηκε, είτε μπορούν να επιστρέψουν ρητά ένα αντικείμενο με τη λέξη-κλειδί return.
class Calculator
# Positional arguments
def add(num1, num2)
return num1 + num2 # Explicit return
end
# Keyword arguments
def multiply(num1:, num2:)
num1 * num2 # Implicit return
end
end
Οι μέθοδοι καλούνται με τη σύνταξη .:
calc = Calculator.new
calc.add(1, 3)
calc.multiply(num1: 2, num2: 5)
Σε αυτή την άσκηση θα γράψεις λίγο κώδικα για να σε βοηθήσει να μαγειρέψεις υπέροχα λαζάνια από το αγαπημένο σου βιβλίο μαγειρικής.
Έχεις τέσσερις εργασίες, όλες σχετικές με τον χρόνο που χρειάζεται για να μαγειρέψεις τα λαζάνια.
Όρισε τη σταθερά Lasagna::EXPECTED_MINUTES_IN_OVEN, η οποία επιστρέφει πόσα λεπτά πρέπει να μείνουν τα λαζάνια στον φούρνο. Σύμφωνα με το βιβλίο μαγειρικής, ο αναμενόμενος χρόνος ψησίματος σε λεπτά είναι 40:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Όρισε τη μέθοδο Lasagna#remaining_minutes_in_oven, η οποία παίρνει ως παράμετρο τα πραγματικά λεπτά που τα λαζάνια βρίσκονται ήδη στον φούρνο και επιστρέφει πόσα λεπτά πρέπει να μείνουν ακόμη τα λαζάνια στον φούρνο, με βάση τον αναμενόμενο χρόνο ψησίματος σε λεπτά από την προηγούμενη εργασία.
lasagna = Lasagna.new
lasagna.remaining_minutes_in_oven(30)
# => 10
Όρισε τη μέθοδο Lasagna#preparation_time_in_minutes, η οποία παίρνει ως παράμετρο τον αριθμό των στρώσεων που πρόσθεσες στα λαζάνια και επιστρέφει πόσα λεπτά χρειάστηκες για να τα προετοιμάσεις, υποθέτοντας ότι κάθε στρώση σου παίρνει 2 λεπτά.
lasagna = Lasagna.new
lasagna.preparation_time_in_minutes(2)
# => 4
Όρισε τη μέθοδο Lasagna#total_time_in_minutes, η οποία παίρνει δύο ονομαστικές παραμέτρους: η παράμετρος number_of_layers είναι ο αριθμός των στρώσεων που πρόσθεσες στα λαζάνια και η παράμετρος actual_minutes_in_oven είναι ο αριθμός των λεπτών που τα λαζάνια βρίσκονται στον φούρνο. Η συνάρτηση πρέπει να επιστρέφει πόσα λεπτά συνολικά έχεις αφιερώσει στο μαγείρεμα των λαζανιών, δηλαδή το άθροισμα του χρόνου προετοιμασίας σε λεπτά και του χρόνου σε λεπτά που τα λαζάνια έχουν περάσει στον φούρνο μέχρι στιγμής.
lasagna = Lasagna.new
lasagna.total_time_in_minutes(number_of_layers: 3, actual_minutes_in_oven: 20)
# => 26
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ruby με 21 έννοιες121 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.