window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } 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 og mindre kjente metoder for personvernkontroll - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2021-01-28
Programvareutvikling

Ruby 3.0. Ruby og mindre kjente metoder for personvernkontroll

The Codest

Tomasz Szkaradek

Utviklingsarkitekt

En av de mest elskede funksjonene i Ruby er den svært fleksible syntaksen. Personlig elsker jeg Ruby for hvor mange muligheter vi har til å definere klasser og deres egenskaper, og det er dette jeg vil diskutere i denne artikkelen.

Grunnleggende løsninger

La oss anta at vi bruker klassen Foo, som har én offentlig metode og én privat metode:

klasse Foo
  def bar
    :awesome
  end

  private

  def baz
    :noe_privat
  end
end

Alt er flott, vi ser en slik løsning i praktisk talt alle prosjekt. Løping Foo.new.baz vil forårsake feilen NoMethodError (privat metode 'baz' kalt for # ) og det var det vi hadde tenkt å gjøre. Hva skjer hvis vi prøver å endre lagringsformatet og legger til private som et prefiks i klassedefinisjonen?

klasse Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end
end

Som du kan se etter å ha kjørt kode, det fungerer faktisk! Hvorfor kan vi oppgi metodens synlighet før vi gjør det? Fordi når du definerer en metode, returnerer def navnet på metoden som et symbol. Dette uttrykket er ikke bare en del av syntaksen, men de facto en metode som er avledet fra modulklassen og behandler dette symbolet som et argument. For mer informasjon, se dokumentasjonen i denne lenken. Siden det begynte så enkelt med private, la oss prøve å endre synligheten til den private metoden.

klasse Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end

  public :baz
end

Hva vil skje etter at koden er kjørt?

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

Suksess! Basemetoden vår ble offentlig fordi vi gjorde den synlig to ganger. Den samme operasjonen gjelder selvfølgelig for modulene.
​
Flott, men hva får vi ut av det?
​
Denne funksjonaliteten gir oss mye fordi vi fritt kan endre synligheten til en metode mens vi definerer den, eller til og med endre synligheten til metoder når vi arver dem.

La oss nå ta en titt på hva Ruby 2.7 kan gjøre når det gjelder å endre synligheten til aliaser og aksessorer.

klasse Foo
  privat attr_accessor :awesome_variabel
end

Dessverre får vi en feil da den private metoden forventer symbols og attr_accessor. Koden returnerer nil, og dermed er denne metoden ikke kompatibel med den private bruken i Ruby 2.7. Så hva er alternativene våre?

  1. Vi kan bruke attr_accessor under private-nøkkelordet for å få det til å fungere, dvs. at vi vil få en feilmelding når vi ønsker å referere til fantastisk_variabelfantastisk_variabel metode.
klasse Foo
  privat

  attr_accessor :awesome_variabel
end
  1. Det andre alternativet er å utføre den private metoden på metoder generert av attr_attributt; i dette tilfellet må vi også huske å legge inn setteren der.
klasse Foo
  attr_accessor :awesome_variabel

  private :awesome_variable, :awesome_variable=
end

Problemer med attr_ * metoder er ikke de eneste hindringene. Vi kan støte på de samme problemene når vi ønsker å opprette et privat alias.

klasse Foo
  private alias :bar, :awesome_bar
slutt

Ruby 3.0 og virksomheten vår

Heldigvis introduserer Ruby 3.0 en stor endring, ettersom synlighetsmetodene kan ta en matrise som argument, og metodens alias, attr_ *, kan tilbakestille matrisen med navnene på metodene som er definert. Du kan lese mer her.

La oss nå se noen eksempler i den nyeste euba og sjekke om endringene faktisk har blitt gjort, og hvordan vi kan bruke dem.
​
I det første eksempelet bruker vi private før attr-tilgangeren:

klasse Foo
  privat attr_accessor :awesome_variabel
end

Et slikt anrop vil ikke forårsake feil i syntaksanalysen, og det som er viktig, er at fantastisk_variabel ogfantastisk_variabel =metoder blir private.
​
Alias-metoden vil gjøre det samme, men nå returnerer den også et symbol som navn på den nye metoden og gjør den synlig.

klasse Foo
  private alias :bar, :awesome_bar
slutt

Et interessant faktum er at vi også kan fordype oss i flere metoder, f.eks. den fantastiskeprint-modulen kan kalles mellom private og attrleseren; det er viktig at en slik metode returnerer en matrise med navnene på metodene som befinner seg på høyre side av uttrykket.

klasse Modul
  def awesome_print(navn)
    setter navn
    navn
  end
end
klasse Foo
  private awesome_print attr_reader :awesome_bar
end 

Sammendrag

Håper du vil finne denne artikkelen nyttig! I tilfelle flere nyheter om Ruby 3.0. les mer her.

God koding!

Ruby Developer Offer

Les mer om dette:

Hold kjeft og ta pengene dine #1: Skjulte kostnader og reell smidighet i produktutviklingsprosessen

CTO-utfordringer - oppskalering og vekst av programvareprodukter

Relaterte artikler

Programvareutvikling

Bygg fremtidssikre webapper: Innsikt fra The Codests ekspertteam

Oppdag hvordan The Codest utmerker seg når det gjelder å skape skalerbare, interaktive webapplikasjoner med banebrytende teknologi som gir sømløse brukeropplevelser på tvers av alle plattformer. Finn ut hvordan ekspertisen vår driver digital transformasjon og...

THECODEST
Programvareutvikling

Topp 10 Latvia-baserte programvareutviklingsselskaper

I vår nyeste artikkel kan du lese mer om Latvias beste programvareutviklingsselskaper og deres innovative løsninger. Oppdag hvordan disse teknologilederne kan bidra til å løfte virksomheten din.

thecodest
Løsninger for bedrifter og oppskalering

Grunnleggende om Java-programvareutvikling: En guide til vellykket outsourcing

Utforsk denne viktige veiledningen om vellykket outsourcing av Java-programvareutvikling for å øke effektiviteten, få tilgang til ekspertise og drive frem prosjektsuksess med The Codest.

thecodest
Programvareutvikling

Den ultimate guiden til outsourcing i Polen

Den kraftige økningen i outsourcing i Polen er drevet av økonomiske, utdanningsmessige og teknologiske fremskritt, noe som fremmer IT-vekst og et forretningsvennlig klima.

TheCodest
Løsninger for bedrifter og oppskalering

Den komplette guiden til verktøy og teknikker for IT-revisjon

IT-revisjoner sørger for sikre, effektive og kompatible systemer. Les hele artikkelen for å lære mer om viktigheten av dem.

The Codest
Jakub Jakubowicz CTO og medgrunnlegger

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologisentre

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

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

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