Για να δηλώσεις μια μεταβλητή, χρησιμοποίησε τον τελεστή ανάθεσης =.
Στην 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
Σε αυτή την άσκηση, θα γράψεις κώδικα για να σε βοηθήσει να μαγειρέψεις μια υπέροχη λαζάνια από το αγαπημένο σου βιβλίο μαγειρικής.
Έχεις τέσσερις εργασίες, όλες σχετικές με τον χρόνο που αφιερώνεται στο μαγείρεμα της λαζάνιας.
Όρισε τη σταθερά EXPECTED_MINUTES_IN_OVEN στην κλάση Lasagna, που αποθηκεύει πόσα λεπτά πρέπει να μείνει η λαζάνια στον φούρνο.
Σύμφωνα με το βιβλίο μαγειρικής, ο αναμενόμενος χρόνος ψησίματος σε λεπτά είναι 40:
Lasagna::EXPECTED_MINUTES_IN_OVEN
# => 40
Όρισε τη μέθοδο Lasagna#remaining_minutes_in_oven που παίρνει ως παράμετρο τα πραγματικά λεπτά που η λαζάνια βρίσκεται στον φούρνο και επιστρέφει πόσα λεπτά πρέπει ακόμα να μείνει η λαζάνια στον φούρνο, με βάση τον αναμενόμενο χρόνο ψησίματος σε λεπτά από την προηγούμενη εργασία.
Lasagna.new.remaining_minutes_in_oven(30)
# => 10
Όρισε τη μέθοδο Lasagna#preparation_time_in_minutes, που παίρνει ως παράμετρο τον αριθμό των στρώσεων που πρόσθεσες στη λαζάνια και επιστρέφει τον αριθμό των λεπτών που αφιέρωσες για να την προετοιμάσεις, υποθέτοντας ότι κάθε στρώση θέλει 2 λεπτά για να προετοιμαστεί.
Lasagna.new.preparation_time_in_minutes(2)
# => 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
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Crystal με 26 έννοιες142 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.