(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); "Ruby 3.0". Ruby ir mažiau žinomi privatumo kontrolės metodai - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2019-09-03
Programinės įrangos kūrimas

"Ruby 3.0". Ruby ir mažiau žinomi privatumo kontrolės metodai

The Codest

Tomasz Szkaradek

Plėtros architektas

Viena iš labiausiai pamėgtų "Ruby" ypatybių - labai lanksti sintaksė. Asmeniškai man Ruby patinka dėl to, kiek daug galimybių turime apibrėždami klases ir jų savybes, ir būtent tai aptarsiu šiame straipsnyje.

Pagrindiniai sprendimai

Tarkime, kad naudojame Foo klasę, kuri turi vieną viešąjį ir vieną privatųjį metodą:

klasė Foo
  def bar
    :awesome
  pabaiga

  privatus

  def baz
    :something_private
  pabaiga
end

Viskas puiku, tokį sprendimą matome beveik kiekviename projektas. Veikia Foo.new.baz sukels klaidą NoMethodError (privatus metodas ‘baz’ iškviestas # ) tai ir norėjome padaryti. Kas nutiks, jei bandysime pakeisti išsaugojimo formatą ir į klasės apibrėžtį kaip priešdėlį pridėsime private?

klasė Foo
  def bar
    :awesome
  pabaiga

  privatus def baz
    :something_private
  end
end

Kaip matote, paleidę kodas, jis iš tikrųjų veikia! Kodėl prieš atlikdami metodą galime įvesti jo matomumą? Todėl, kad apibrėžiant metodą def grąžina metodo pavadinimą kaip simbolį. Ši išraiška yra ne tik sintaksės dalis, bet ir de facto metodas, išvestas iš Modulio klasės ir traktuojantis šį simbolį kaip argumentą. Daugiau informacijos rasite dokumentacijoje šioje nuorodoje. Kadangi taip lengvai pradėjome nuo private, pabandykime pakeisti privataus metodo matomumą.

klasė Foo
  def bar
    :awesome
  pabaiga

  privatus def baz
    :something_private
  end

  public :baz
end

Kas nutiks paleidus kodą?

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

Sėkmė! Mūsų bazių metodas tapo viešas, nes jį padarėme matomą du kartus. Žinoma, ta pati operacija taikoma ir moduliams.
​
Puiku, bet kur jis patenka mus?
​
Šis funkcionalumas mums suteikia daug, nes galime laisvai keisti metodo matomumą jį apibrėžiant arba net keisti metodų matomumą juos paveldint.

Dabar pažvelkime į tai, kas Ruby 2.7 gali pakeisti aliasų ir accessorių matomumą.

klasė Foo
  privatus attr_accessor :awesome_variable
pabaiga

Deja, gauname klaidą, nes privatus metodas tikisi simbolių ir attr_accessor. Kodas grąžina nil, todėl šis metodas nesuderinamas su "Ruby 2.7" privačiu naudojimu. Taigi kokios yra mūsų galimybės?

  1. Galime naudoti attr_accessor pagal raktinį žodį private, kad jis veiktų, t. y. gausime klaidą, kai norėsime pateikti nuorodą į awesome_variableawesome_variable metodas.
klasė Foo
  privatus

  attr_accessor :awesome_variable
pabaiga
  1. Antroji galimybė - vykdyti privatų metodą metodams, sukurtiems attr_attribute; šiuo atveju taip pat turime nepamiršti įvesti setterį.
klasė Foo
  attr_accessor :awesome_variable

  private :awesome_variable, :awesome_variable=
end

Problemos, susijusios su atr_ * metodai nėra vienintelės kliūtys. Su tais pačiais sunkumais galime susidurti, kai norime sukurti privatų slapyvardį.

klasė Foo
  privatūs slapyvardžiai :bar, :awesome_bar
pabaiga

"Ruby 3.0" ir mūsų verslas

Laimei, "Ruby 3.0" įdiegtas didelis pokytis - matomumo metodai gali priimti masyvą kaip argumentą, o metodų pseudonimas attr_ * gali iš naujo nustatyti masyvą su apibrėžtų metodų pavadinimais. Galite perskaityti daugiau čia.

Dabar pažiūrėkime keletą pavyzdžių naujausioje "euba" versijoje ir patikrinkime, ar pakeitimai iš tikrųjų buvo padaryti ir kaip juos galime naudoti.
​
Pirmajame pavyzdyje naudokime private prieš attr accessor:

klasė Foo
  privatus attr_accessor :awesome_variable
pabaiga

Toks iškvietimas nesukels sintaksės analizės klaidų, o svarbiausia, kad awesome_variable irawesome_variable =metodai tampa privatūs.
​
Pseudonimo metodas atliks tą patį, nes dabar jis taip pat grąžina simbolį kaip naujo metodo pavadinimą ir padaro jį matomą.

klasė Foo
  privatūs slapyvardžiai :bar, :awesome_bar
pabaiga

Įdomu tai, kad galime pasinerti ir į kitus metodus, pvz., nuostabųspausdinimo modulis gali būti iškviestas tarp private ir attrsvarbu, kad toks metodas grąžintų masyvą su dešinėje išraiškos pusėje esančių metodų pavadinimais.

klasė Modulis
  def awesome_print(names)
    puts names
    names
  end
end
klasė Foo
  private awesome_print attr_reader :awesome_bar
end 

Santrauka

Tikimės, kad šis straipsnis jums bus naudingas! Jei yra daugiau naujienų apie Ruby 3.0, skaitykite daugiau čia.

Laimingo kodavimo!

"Ruby" programuotojo pasiūlymas

Skaityti daugiau:

Užsičiaupk ir pasiimk pinigus #1: paslėptos išlaidos ir tikrasis produktų kūrimo proceso judrumas

CTO iššūkiai - programinės įrangos produktų masto didinimas ir augimas

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian