5 παραδείγματα της καλύτερης χρήσης της Ruby
Αναρωτηθήκατε ποτέ τι μπορούμε να κάνουμε με τη Ruby; Λοιπόν, ο ουρανός είναι μάλλον το όριο, αλλά είμαστε στην ευχάριστη θέση να μιλήσουμε για μερικές περισσότερο ή λιγότερο γνωστές περιπτώσεις...

Διαβάστε ένα άρθρο που προέρχεται από τον Ειδικό μας για τη Ruby και μάθετε γιατί δεν χρειάζεται να χρησιμοποιείτε πάντα youse hash.
Όταν θέλουμε να συγκεντρώσουμε κάποια πράγματα, πολύ συχνά χρησιμοποιούμε το 1TP65Διδάσκω_με_αντικείμενο
ή να επεκτείνετε την κανονική βρόχος χρησιμοποιώντας το #με_αντικείμενο
. Αλλά στις περισσότερες περιπτώσεις Προγραμματιστές Ruby χρησιμοποιείτε έναν απλό κατακερματισμό ως συσσωρευτή και ίσως είναι μια χαρά, αλλά σε αυτό το άρθρο, θα ήθελα να σας δείξω ότι δεν χρειάζεται πάντα να είναι κατακερματισμός.
Υποθέτουμε ότι όλα τα αρχεία είναι τοποθετημένα σε έναν κατάλογο (άνθρωποι
).
Ας πούμε ότι έχουμε τα εξής people/people.csv
file:
Όνομα,Επώνυμο,Ηλικία
John,Doe,24
Jane,Dee,45
Josh,Bee,55
Andrea,Boya,34
Andrew,Moore,54
Θέλουμε να βρούμε το σύνολο των γραμμών και τον μέσο όρο ηλικίας - θα μπορούσαμε να γράψουμε το ακόλουθο σενάριο:
people/parser.rb
require 'csv'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject({ total: 0, totalage: 0 }) do |row, agg|
agg[:total] += 1
agg[:totalage] += row['Age'].toi
end
total = aggregated[:total]
averageage = aggregated[:totalage].to_f / total
puts "Total: #{total}"
puts "Μέση ηλικία: #{average_age}"
Και ναι, κάνει το πράγμα, αλλά διαβάζοντας ένα τέτοιο κωδικός είναι μια αμφίβολη ευχαρίστηση. Αισθάνεται σαν ένα πολύ χαμηλό επίπεδο. Μπορούμε να το βελτιώσουμε παρέχοντας έναν αποκλειστικό συγκεντρωτή για το βρόχος.
people/age_aggregator.rb
class AgeAggregator
attrreader :total, :totalage
def initialize
@total = 0
@total_age = 0
end
def increment!
@total += 1
end
def incrementage!(age)
@totalage += age
end
def averageage
totalage.to_f / total
end
end
Και τότε ο βρόχος μας θα έχει την παρακάτω μορφή:
people/parser.rb
require 'csv'
requirerelative './ageaggregator.rb'
aggregated = CSV.foreach('people.csv', headers: true)
.withobject(AgeAggregator.new) do |row, agg|
agg.increment!
agg.incrementage!(row['Age'].to_i)
end
puts "Σύνολο: #{aggregated.total}"
puts "Μέση ηλικία: #{aggregated.average_age}"
Νομίζω ότι είναι πολύ πιο σαφές.
Έχουμε γράψει περισσότερο κώδικα, αλλά οι λεπτομέρειες χαμηλότερου επιπέδου εξάγονται στην ξεχωριστή κλάση. Τώρα το κύριο σενάριο διαβάζεται πολύ καλύτερα.
Φυσικά, μπορείτε να ισχυριστείτε ότι το παράδειγμα είναι πολύ απλό για να καταβάλλετε τόση προσπάθεια για αναδιαμόρφωση, αλλά ελάτε τώρα - είναι απλώς ένα παράδειγμα ;). Αν έπρεπε να συγκεντρώσετε περισσότερα δεδομένα, τέτοια αντικείμενα συνάθροισης είναι πραγματικά ο τρόπος διάσωσης.
Διαβάστε περισσότερα:
Πλεονεκτήματα και μειονεκτήματα της ανάπτυξης λογισμικού Ruby