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 już istnieje') } 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 i mniej znane metody kontroli prywatności - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2021-01-28
Software Development

Ruby 3.0. Ruby i mniej znane metody kontroli prywatności

The Codest

Tomasz Szkaradek

Architekt rozwoju

Jedną z najbardziej lubianych cech Rubiego jest jego bardzo elastyczna składnia. Osobiście uwielbiam Rubiego za to, jak wiele możliwości mamy w definiowaniu klas i ich właściwości, i to właśnie omówię w tym artykule.

Podstawowe rozwiązania

Załóżmy, że używamy klasy Foo, która ma jedną metodę publiczną i jedną prywatną:

klasa Foo
  def bar
    :awesome
  end

  prywatny

  def baz
    something_private
  end
end

Wszystko świetnie, widzimy takie rozwiązanie praktycznie w każdym projekt. Bieganie Foo.new.baz spowoduje błąd NoMethodError (prywatna metoda 'baz' wywołana dla #) i to właśnie chcieliśmy zrobić. Co się stanie, jeśli spróbujemy zmienić format zapisu i dodamy private jako przedrostek w definicji klasy?

klasa Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end
end

Jak widać po uruchomieniu kodto faktycznie działa! Dlaczego możemy wprowadzić widoczność metody przed jej wykonaniem? Ponieważ podczas definiowania metody, def zwraca nazwę metody jako symbol. Wyrażenie to jest nie tylko częścią składni, ale de facto metodą wywodzącą się z klasy Module i traktującą ten symbol jako argument. Więcej informacji można znaleźć w dokumentacji w tym linku. Skoro zaczęło się tak łatwo od private, spróbujmy zmienić widoczność metody prywatnej.

klasa Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end

  public :baz
end

Co się stanie po uruchomieniu kodu?

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

Sukces! Nasza metoda baz stała się publiczna, ponieważ uwidoczniliśmy ją dwukrotnie. Oczywiście ta sama operacja dotyczy modułów.
​
Świetnie, ale dokąd nas to zaprowadzi?
​
Ta funkcjonalność daje nam wiele, ponieważ możemy dowolnie zmieniać widoczność metody podczas jej definiowania, a nawet zmieniać widoczność metod podczas ich dziedziczenia.

Przyjrzyjmy się teraz, co Ruby 2.7 może zrobić w zakresie zmiany widoczności aliasów i akcesorów.

class Foo
  private attr_accessor :awesome_variable
end

Niestety, otrzymujemy błąd, ponieważ metoda prywatna oczekuje symboli i attr_accessor. Kod zwraca nil, a zatem ta metoda nie jest zgodna z prywatnym użyciem w Ruby 2.7. Jakie więc mamy opcje?

  1. Możemy użyć attr_accessor pod słowem kluczowym private, aby to zadziałało, tj. otrzymamy błąd, gdy będziemy chcieli odwołać się do awesome_variableawesome_variable metoda.
class Foo
  prywatny

  attr_accessor :awesome_variable
end
  1. Drugą opcją jest wykonanie metody prywatnej na metodach wygenerowanych przez attr_attributeW tym przypadku musimy również pamiętać o wpisaniu tam settera.
class Foo
  attr_accessor :awesome_variable

  private :awesome_variable, :awesome_variable=
end

Problemy z attr_ * nie są jedynymi przeszkodami. Tę samą trudność możemy napotkać, gdy chcemy utworzyć prywatny alias.

class Foo
  private alias :bar, :awesome_bar
end

Ruby 3.0 i nasza działalność

Na szczęście Ruby 3.0 wprowadza świetną zmianę, ponieważ metody widoczności mogą przyjmować tablicę jako argument, a alias metod, attr_ *, może zresetować tablicę z nazwami metod, które zostały zdefiniowane. Możesz przeczytać więcej tutaj.

Zobaczmy teraz kilka przykładów w najnowszym euba i sprawdźmy, czy zmiany zostały faktycznie wprowadzone i jak możemy z nich korzystać.
​
W pierwszym przykładzie użyjmy private przed attr accessor:

class Foo
  private attr_accessor :awesome_variable
end

Takie wywołanie nie spowoduje błędów w parsowaniu składni i, co ważne, nie spowoduje błędów w działaniu funkcji awesome_variable iawesome_variable =metody stają się prywatne.
​
Metoda aliasu zrobi to samo, ale teraz również zwraca symbol jako nazwę nowej metody i czyni ją widoczną.

class Foo
  private alias :bar, :awesome_bar
end

Ciekawostką jest fakt, że możemy również zagłębić się w kolejne metody, np. rewelacyjnąmoduł print może być wywołany pomiędzy private i attrreader; ważne jest, aby taka metoda zwracała tablicę z nazwami metod, które znajdują się po prawej stronie wyrażenia.

class Moduł
  def awesome_print(names)
    puts names
    nazwy
  end
end
class Foo
  private awesome_print attr_reader :awesome_bar
end 

Podsumowanie

Mamy nadzieję, że ten artykuł okaże się przydatny! W przypadku dalszych wiadomości o Ruby 3.0. czytaj dalej tutaj.

Szczęśliwego kodowania!

Oferta dla programistów Ruby

Czytaj więcej:

Zamknij się i bierz swoje pieniądze #1: Ukryte koszty i prawdziwa elastyczność w procesie rozwoju produktu

Wyzwania CTO - skalowanie i rozwój oprogramowania

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polska

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

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