window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster υπάρχει ήδη') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Ruby 3.0. Ruby και λιγότερο γνωστές μέθοδοι ελέγχου της ιδιωτικότητας - The Codest
The Codest
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Βιομηχανίες
    • Fintech & Τραπεζική
    • E-commerce
    • Adtech
    • Healthtech
    • Κατασκευή
    • Εφοδιαστική
    • Αυτοκίνητο
    • IOT
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
  • Σχετικά με εμάς
  • Υπηρεσίες
    • Ανάπτυξη λογισμικού
      • Ανάπτυξη Frontend
      • Backend Ανάπτυξη
    • Staff Augmentation
      • Frontend Developers
      • Backend Developers
      • Μηχανικοί δεδομένων
      • Μηχανικοί cloud
      • Μηχανικοί QA
      • Άλλα
    • Συμβουλευτική
      • Έλεγχος & Συμβουλευτική
  • Αξία για
    • CEO
    • CTO
    • Διευθυντής παράδοσης
  • Η ομάδα μας
  • Case Studies
  • Μάθετε πώς
    • Blog
    • Συναντήσεις
    • Διαδικτυακά σεμινάρια
    • Πόροι
Καριέρα Ελάτε σε επαφή
Πίσω βέλος GO BACK
2021-01-28
Ανάπτυξη λογισμικού

Ruby 3.0. Ruby και λιγότερο γνωστές μέθοδοι ελέγχου της ιδιωτικότητας

The Codest

Tomasz Szkaradek

Αρχιτέκτονας ανάπτυξης

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

Βασικές λύσεις

Ας υποθέσουμε ότι χρησιμοποιούμε την κλάση Foo που έχει μία δημόσια μέθοδο και μία ιδιωτική μέθοδο:

κλάση Foo
  def bar
    :awesome
  end

  private

  def baz
    :something_private
  end
end

Όλα είναι υπέροχα, βλέπουμε μια τέτοια λύση σχεδόν σε κάθε έργο. Εκτέλεση Foo.new.baz θα προκαλέσει το σφάλμα NoMethodError (κλήση της ιδιωτικής μεθόδου 'baz' για το # ) και αυτό ήταν που θέλαμε να κάνουμε. Τι θα συμβεί αν προσπαθήσουμε να αλλάξουμε τη μορφή αποθήκευσης και προσθέσουμε το private ως πρόθεμα στον ορισμό της κλάσης;

κλάση Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end
end

Όπως μπορείτε να δείτε μετά την εκτέλεση του κωδικός, λειτουργεί πραγματικά! Γιατί μπορούμε να εισάγουμε την ορατότητα της μεθόδου πριν την εκτελέσουμε; Επειδή κατά τον ορισμό μιας μεθόδου, η def επιστρέφει το όνομα της μεθόδου ως σύμβολο. Αυτή η έκφραση δεν είναι μόνο ένα μέρος της σύνταξης, αλλά de facto μια μέθοδος που προέρχεται από την κλάση Module και αντιμετωπίζει αυτό το σύμβολο ως όρισμα. Για περισσότερες πληροφορίες, ανατρέξτε στην τεκμηρίωση σε αυτόν τον σύνδεσμο. Αφού ξεκίνησε τόσο εύκολα με την private, ας προσπαθήσουμε να αλλάξουμε την ορατότητα της private μεθόδου.

κλάση Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end

  public :baz
end

Τι θα συμβεί μετά την εκτέλεση του κώδικα;

irb(main):012:0> Foo.new.baz
=> :something_private

Επιτυχία! Η μέθοδος των βάσεων μας έγινε δημόσια επειδή την κάναμε ορατή δύο φορές. Φυσικά, η ίδια λειτουργία ισχύει και για τις ενότητες.
​
Υπέροχα, αλλά πού μας οδηγεί αυτό;
​
Αυτή η λειτουργικότητα μας δίνει πολλά γιατί μπορούμε να αλλάξουμε ελεύθερα την ορατότητα μιας μεθόδου κατά τον ορισμό της, ή ακόμα και να αλλάξουμε την ορατότητα των μεθόδων όταν τις κληρονομούμε.

Τώρα, ας ρίξουμε μια ματιά στο τι μπορεί να κάνει η Ruby 2.7 όσον αφορά την αλλαγή της ορατότητας των ψευδωνύμων και των accessors.

κλάση Foo
  private attr_accessor :awesome_variable
end

Δυστυχώς, λαμβάνουμε ένα σφάλμα καθώς η ιδιωτική μέθοδος αναμένει σύμβολα και attr_accessor. Ο κώδικας επιστρέφει nil και έτσι αυτή η μέθοδος δεν είναι συμβατή με τη χρήση private στη Ruby 2.7. Ποιες είναι λοιπόν οι επιλογές μας;

  1. Μπορούμε να χρησιμοποιήσουμε το attr_accessor κάτω από τη λέξη-κλειδί private για να το κάνουμε να λειτουργήσει, δηλαδή θα λάβουμε ένα σφάλμα όταν θέλουμε να αναφερθούμε στο φοβερή_μεταβλητήφοβερή_μεταβλητή μέθοδος.
κλάση Foo
  private

  attr_accessor :awesome_variable
end
  1. Η δεύτερη επιλογή είναι η εκτέλεση της ιδιωτικής μεθόδου σε μεθόδους που παράγονται από attr_attribute; σε αυτή την περίπτωση, πρέπει επίσης να θυμηθούμε να εισάγουμε τον ρυθμιστή εκεί.
κλάση Foo
  attr_accessor :awesome_variable

  private :awesome_variable, :awesome_variable=
end

Προβλήματα με το attr_ * οι μέθοδοι δεν είναι τα μόνα εμπόδια. Μπορούμε να αντιμετωπίσουμε την ίδια δυσκολία όταν θέλουμε να δημιουργήσουμε ένα ιδιωτικό ψευδώνυμο.

κλάση Foo
  private alias :bar, :awesome_bar
end

Το Ruby 3.0 και η επιχείρησή μας

Ευτυχώς, η Ruby 3.0 εισάγει μια μεγάλη αλλαγή, καθώς οι μέθοδοι ορατότητας μπορούν να λάβουν πίνακα ως όρισμα και το ψευδώνυμο των μεθόδων, attr_ *, μπορεί να επαναφέρει τον πίνακα με τα ονόματα των μεθόδων που έχουν οριστεί. Μπορείτε να διαβάσετε περισσότερα εδώ.

Τώρα, ας δούμε μερικά παραδείγματα στο τελευταίο euba και ας ελέγξουμε αν οι αλλαγές έχουν πράγματι γίνει και πώς μπορούμε να τις χρησιμοποιήσουμε.
​
Στο πρώτο παράδειγμα, ας χρησιμοποιήσουμε το private πριν από τον προσπελάτη attr:

κλάση Foo
  private attr_accessor :awesome_variable
end

Μια τέτοια κλήση δεν θα προκαλέσει σφάλματα κατά την ανάλυση της σύνταξης και, το σημαντικότερο, η awesome_variable καιawesome_variable =οι μέθοδοι γίνονται ιδιωτικές.
​
Η μέθοδος alias θα κάνει το ίδιο, καθώς τώρα επιστρέφει επίσης ένα σύμβολο ως όνομα της νέας μεθόδου και το καθιστά ορατό.

κλάση Foo
  private alias :bar, :awesome_bar
end

Ένα ενδιαφέρον γεγονός είναι ότι μπορούμε επίσης να εμβαθύνουμε σε περαιτέρω μεθόδους, π.χ. το φοβερόΗ ενότητα print μπορεί να κληθεί μεταξύ των private και attrαναγνώστη- είναι σημαντικό μια τέτοια μέθοδος να επιστρέφει έναν πίνακα με τα ονόματα των μεθόδων που βρίσκονται στη δεξιά πλευρά της έκφρασης.

κλάση Module
  def awesome_print(names)
    puts names
    names
  end
end
κλάση Foo
  private awesome_print attr_reader :awesome_bar
end 

Περίληψη

Ελπίζω να βρείτε αυτό το άρθρο χρήσιμο! Σε περίπτωση περισσότερων ειδήσεων σχετικά με το Ruby 3.0. διαβάστε περισσότερα εδώ.

Καλή κωδικοποίηση!

Προσφορά Ruby Developer

Διαβάστε περισσότερα:

Σκάσε και πάρε τα λεφτά σου #1: Κρυφό κόστος και πραγματική ευελιξία στη διαδικασία ανάπτυξης προϊόντων

Προκλήσεις CTO - κλιμάκωση και ανάπτυξη προϊόντων λογισμικού

Σχετικά άρθρα

Ανάπτυξη λογισμικού

Κατασκευάστε μελλοντικά ασφαλείς εφαρμογές Web: γνώσεις από την ομάδα εμπειρογνωμόνων του The Codest

Ανακαλύψτε πώς η The Codest υπερέχει στη δημιουργία κλιμακούμενων, διαδραστικών εφαρμογών ιστού με τεχνολογίες αιχμής, παρέχοντας απρόσκοπτη εμπειρία χρήστη σε όλες τις πλατφόρμες. Μάθετε πώς η τεχνογνωσία μας οδηγεί στον ψηφιακό μετασχηματισμό και την επιχειρηματική...

THECODEST
Ανάπτυξη λογισμικού

Top 10 εταιρείες ανάπτυξης λογισμικού με έδρα τη Λετονία

Μάθετε για τις κορυφαίες εταιρείες ανάπτυξης λογισμικού της Λετονίας και τις καινοτόμες λύσεις τους στο τελευταίο μας άρθρο. Ανακαλύψτε πώς αυτοί οι τεχνολογικοί ηγέτες μπορούν να βοηθήσουν στην ανύψωση της επιχείρησής σας.

thecodest
Λύσεις Enterprise & Scaleups

Βασικά στοιχεία ανάπτυξης λογισμικού Java: Α Guide to Outsourcing Successfully (Οδηγός για την επιτυχή εξωτερική ανάθεση)

Εξερευνήστε αυτόν τον βασικό οδηγό για την επιτυχή ανάπτυξη λογισμικού outsourcing Java για να αυξήσετε την αποδοτικότητα, να αποκτήσετε πρόσβαση στην τεχνογνωσία και να οδηγήσετε την επιτυχία των έργων με The Codest.

thecodest
Ανάπτυξη λογισμικού

Ο απόλυτος οδηγός για το Outsourcing στην Πολωνία

Η έξαρση της outsourcing στην Πολωνία οφείλεται στις οικονομικές, εκπαιδευτικές και τεχνολογικές εξελίξεις, που ευνοούν την ανάπτυξη της πληροφορικής και το φιλικό προς τις επιχειρήσεις κλίμα.

TheCodest
Λύσεις Enterprise & Scaleups

Ο πλήρης οδηγός εργαλείων και τεχνικών ελέγχου πληροφορικής

Οι έλεγχοι ΤΠ διασφαλίζουν ασφαλή, αποτελεσματικά και συμβατά συστήματα. Μάθετε περισσότερα για τη σημασία τους διαβάζοντας ολόκληρο το άρθρο.

The Codest
Jakub Jakubowicz CTO & Συνιδρυτής

Εγγραφείτε στη βάση γνώσεών μας και μείνετε ενήμεροι για την τεχνογνωσία από τον τομέα της πληροφορικής.

    Σχετικά με εμάς

    The Codest - Διεθνής εταιρεία ανάπτυξης λογισμικού με κέντρα τεχνολογίας στην Πολωνία.

    Ηνωμένο Βασίλειο - Έδρα

    • Γραφείο 303B, 182-184 High Street North E6 2JA
      Λονδίνο, Αγγλία

    Πολωνία - Τοπικοί κόμβοι τεχνολογίας

    • Πάρκο γραφείων Fabryczna, Aleja
      Pokoju 18, 31-564 Κρακοβία
    • Πρεσβεία του εγκεφάλου, Konstruktorska
      11, 02-673 Βαρσοβία, Πολωνία

      The Codest

    • Αρχική σελίδα
    • Σχετικά με εμάς
    • Υπηρεσίες
    • Case Studies
    • Μάθετε πώς
    • Καριέρα
    • Λεξικό

      Υπηρεσίες

    • Συμβουλευτική
    • Ανάπτυξη λογισμικού
    • Backend Ανάπτυξη
    • Ανάπτυξη Frontend
    • Staff Augmentation
    • Backend Developers
    • Μηχανικοί cloud
    • Μηχανικοί δεδομένων
    • Άλλα
    • Μηχανικοί QA

      Πόροι

    • Γεγονότα και μύθοι σχετικά με τη συνεργασία με εξωτερικό συνεργάτη ανάπτυξης λογισμικού
    • Από τις ΗΠΑ στην Ευρώπη: Γιατί οι αμερικανικές νεοσύστατες επιχειρήσεις αποφασίζουν να μετεγκατασταθούν στην Ευρώπη
    • Σύγκριση υπεράκτιων κόμβων ανάπτυξης τεχνολογίας: Ευρώπη (Πολωνία), ASEAN (Φιλιππίνες), Ευρασία (Τουρκία)
    • Ποιες είναι οι κορυφαίες προκλήσεις των CTOs και των CIOs;
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Πνευματικά δικαιώματα © 2025 από The Codest. Όλα τα δικαιώματα διατηρούνται.

    elGreek
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek