Η επίλυση μιας άσκησης στο Exercism είναι μόνο το πρώτο βήμα. Η πραγματική μάθηση έρχεται στη συνέχεια!
Αυτή την εβδομάδα λανσάραμε τη νέα καρτέλα "Dig Deeper" στις ασκήσεις, σχεδιασμένη να σε βοηθήσει να ξεπεράσεις το στάδιο της επίλυσης και να εξερευνήσεις τις λεπτές διαφορές και τα ανταλλάγματα μιας άσκησης, χωρίς να χρειάζεται να ρωτήσεις κάποιον μέντορα.
Εισαγωγή
Οι λύσεις των ασκήσεών μας ποικίλλουν εντυπωσιακά.
Η πιο βασική "κανονική" άσκηση στις περισσότερες διαδρομές είναι η TwoFer.
Μια τυπική λύση μοιάζει κάπως έτσι (αυτό είναι Ruby, αλλά είναι παρόμοιο στις περισσότερες γλώσσες):
module TwoFer
def self.two_fer(name='you')
"One for #{name}, one for me."
end
end
Ωστόσο, από τις 500 πιο πρόσφατες λύσεις που πέρασαν τα tests, πάνω από 350 ήταν μοναδικές 😲 Και ακόμα κι όταν κανονικοποιήσεις πράγματα όπως τα κενά και τα ονόματα μεταβλητών, πάνω από τις μισές θα είναι ακόμα πραγματικά μοναδικές λύσεις.
Πράγμα που κάνει την εξερεύνηση του πώς λύνει ο καθένας τα πράγματα απολύτως συναρπαστική. Αλλά είναι επίσης εντελώς ανέφικτο. Υπάρχουν εκατομμύρια λύσεις στο Exercism και το να τις διαβάσεις όλες θα έπαιρνε κυριολεκτικά μια ολόκληρη ζωή.
Ωστόσο! Έχοντας σχεδιάσει τις ασκήσεις και καθοδηγήσει εκατοντάδες χιλιάδες ανθρώπους μέσα από αυτές, η ομάδα μας έχει μια αρκετά καλή ιδέα για τις διαφορετικές προσεγγίσεις που ακολουθούν οι άνθρωποι. Έτσι προσθέσαμε τη νέα καρτέλα Dig Deeper για να αναδείξουμε τους διαφορετικούς ιδιωματικούς (ή μη ιδιωματικούς, αλλά ενδιαφέροντες) τρόπους με τους οποίους μπορεί να λυθεί μια άσκηση.
Ένα παράδειγμα
Ας πάρουμε ένα παράδειγμα για να το δείξουμε αυτό στην πράξη. Στη C# υπάρχουν διάφοροι τρόποι για να αντιστρέψεις μια συμβολοσειρά.
Μπορείς να χρησιμοποιήσεις τη μέθοδο Array.Reverse():
var chars = input.ToCharArray();
Array.Reverse(chars);
return new string(chars);
Ή να χρησιμοποιήσεις μια συντομότερη προσέγγιση βασισμένη σε LINQ:
return new string(input.Reverse().ToArray());
ή να χρησιμοποιήσεις ένα StringBuilder:
var chars = new StringBuilder();
for (var i = input.Length - 1; i >= 0; i--)
{
chars.Append(input[i]);
}
return chars.ToString();
ή ακόμα να γίνεις λίγο λιγότερο ιδιωματικός (αλλά πιο αποδοτικός!) και να χρησιμοποιήσεις το Span<T>:
Span<char> chars = stackalloc[input.Length];
for (var i = 0; i < input.Length; i++)
{
chars[input.Length - 1 - i] = input[i];
}
return new string(chars);
Καθεμία από αυτές την ονομάζουμε Approach και καθεμία έχει το δικό της ξεχωριστό άρθρο που την εξηγεί. Η σελίδα Dig Deeper για αυτή την άσκηση τα συγκεντρώνει όλα μαζί και συνοδεύεται επίσης από ένα άρθρο για την απόδοση που εξερευνά τα ανταλλάγματα.
👉🏾 Ρίξε μια ματιά (θα χρειαστεί να μπεις σε λειτουργία ανώνυμης περιήγησης αν δεν έχεις λύσει ακόμα την άσκηση)
Αλλά υπάρχει κι άλλο!
Εκτός από τα έγγραφα για αυτές τις διαφορετικές προσεγγίσεις, υπάρχουν χιλιάδες βίντεο που έχουν φτιάξει τα μέλη της κοινότητάς μας, εξερευνώντας ασκήσεις, καταγράφοντας βήμα προς βήμα παρουσιάσεις ή μεταδίδοντας ζωντανές συνεδρίες προγραμματισμού, και βυθιζόμενα στα βάθη του τι κάνει μια λύση ιδιωματική. Συγκεντρώνουμε όλα αυτά τα βίντεο και τα ενσωματώνουμε στις σελίδες.
Πάρε μέρος
Τις επόμενες εβδομάδες, θα αρχίσεις να βλέπεις την καρτέλα Dig Deeper να εμφανίζεται σε ασκήσεις σε όλο το site.
Αν θα ήθελες να συνεισφέρεις ένα Approach, ένα άρθρο άσκησης ή να μας πεις για τα βίντεό σου ώστε να τα προσθέσουμε, επικοινώνησε με τον jonathan@exercism.org και θα σε βοηθήσει να ξεκινήσεις.
Και τέλος, πες μας τη γνώμη σου και ανάρτησε τις ιδέες και τις σκέψεις σου στη δημοσίευση στο forum!