The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2021-01-28
Vývoj softwaru

Ruby 3.0. Ruby a méně známé metody kontroly soukromí

The Codest

Tomasz Szkaradek

Vývojový architekt

Jednou z nejoblíbenějších vlastností jazyka Ruby je jeho velmi flexibilní syntaxe. Osobně mám Ruby rád pro to, kolik možností máme při definování tříd a jejich vlastností, a právě o tom budu hovořit v tomto článku.

Základní řešení

Předpokládejme, že používáme třídu Foo, která má jednu veřejnou a jednu soukromou metodu:

třída Foo
  def bar
    :awesome
  end

  private

  def baz
    :something_private
  end
end

Vše je skvělé, takové řešení vidíme prakticky v každém projekt. Běh Foo.new.baz způsobí chybu NoMethodError (soukromá metoda 'baz' volána pro # ) a to jsme chtěli udělat. Co se stane, když se pokusíme změnit formát ukládání a přidáme private jako předponu v definici třídy?

třída Foo
  def bar
    :awesome
  end

  private def baz
    :něco_soukromé
  end
end

Jak vidíte po spuštění kód, skutečně to funguje! Proč můžeme před provedením metody zadat její viditelnost? Protože při definici metody def vrací název metody jako symbol. Tento výraz není jen součástí syntaxe, ale de facto metodou odvozenou od třídy Module a považující tento symbol za argument. Více informací naleznete v dokumentaci na tomto odkazu. Když už to tak snadno začalo s private, zkusme změnit viditelnost metody private.

třída Foo
  def bar
    :awesome
  end

  private def baz
    :něco_soukromé
  end

  public :baz
end

Co se stane po spuštění kódu?

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

Úspěch! Naše metoda základen se stala veřejnou, protože jsme ji dvakrát zviditelnili. Stejná operace samozřejmě platí i pro moduly.
​
Skvělé, ale kam se dostane nás?
​
Tato funkce nám dává hodně, protože můžeme libovolně měnit viditelnost metody při její definici, nebo dokonce měnit viditelnost metod při jejich dědění.

Nyní se podívejme na to, co Ruby 2.7, pokud jde o změnu viditelnosti aliasů a accessorů.

třída Foo
  private attr_accessor :awesome_variable
end

Bohužel se objeví chyba, protože privátní metoda očekává symboly a attr_accessor. Kód vrací nil, a proto tato metoda není kompatibilní s použitím private v Ruby 2.7. Jaké jsou tedy naše možnosti?

  1. Můžeme použít attr_accessor pod klíčovým slovem private, aby to fungovalo, tj. dostaneme chybu, když se budeme chtít odkázat na položku awesome_variableawesome_variable metoda.
třída Foo
  private

  attr_accessor :awesome_variable
end
  1. Druhou možností je spustit soukromou metodu na metodách generovaných pomocí attr_attribute; v tomto případě musíme pamatovat i na zadání setteru.
třída Foo
  attr_accessor :awesome_variable

  private :awesome_variable, :awesome_variable=
end

Problémy s attr_ * metody nejsou jedinou překážkou. Na stejný problém můžeme narazit, když chceme vytvořit soukromý alias.

třída Foo
  private alias :bar, :awesome_bar
end

Ruby 3.0 a naše podnikání

Naštěstí Ruby 3.0 přináší velkou změnu, protože metody viditelnosti mohou přijímat pole jako argument a metody alias, attr_ *, mohou pole resetovat jmény definovaných metod. Můžete si přečíst více zde.

Podívejme se nyní na několik příkladů v nejnovější verzi euby a zkontrolujme, zda byly změny skutečně provedeny a jak je můžeme použít.
​
V prvním příkladu použijme private před accessorem attr:

třída Foo
  private attr_accessor :awesome_variable
end

Takové volání nezpůsobí chybu při analýze syntaxe a, což je důležité. awesome_variable aawesome_variable =metody se stanou soukromými.
​
Metoda alias udělá totéž, protože nyní vrací symbol jako název nové metody a zviditelní ji.

třída Foo
  private alias :bar, :awesome_bar
end

Zajímavé je, že se můžeme pustit i do dalších metod, např. do úžasné metodymodul print lze volat mezi private a attrje důležité, aby taková metoda vracela pole se jmény metod, které jsou na pravé straně výrazu.

třída Modul
  def awesome_print(names)
    puts names
    names
  end
end
třída Foo
  private awesome_print attr_reader :awesome_bar
end 

Souhrn

Doufám, že pro vás bude tento článek užitečný! V případě dalších novinek o Ruby 3.0. čtěte více zde.

Šťastné kódování!

Nabídka pro vývojáře Ruby

Přečtěte si více:

Sklapni a vezmi si své peníze #1: Skryté náklady a skutečná agilita v procesu vývoje produktu

Výzvy CTO - rozšiřování a růst softwarových produktů

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

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