The Codest
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Indústrias
    • Fintech e Banca
    • E-commerce
    • Adtech
    • Tecnologia da saúde
    • Fabrico
    • Logística
    • Automóvel
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
  • Sobre nós
  • Serviços
    • Desenvolvimento de software
      • Desenvolvimento de front-end
      • Desenvolvimento backend
    • Staff Augmentation
      • Programadores Frontend
      • Programadores de back-end
      • Engenheiros de dados
      • Engenheiros de nuvem
      • Engenheiros de GQ
      • Outros
    • Aconselhamento
      • Auditoria e consultoria
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • A nossa equipa
  • Case Studies
  • Saber como
    • Blogue
    • Encontros
    • Webinars
    • Recursos
Carreiras Entrar em contacto
Seta para trás VOLTAR
2021-01-28
Desenvolvimento de software

Ruby 3.0. Ruby e métodos de controlo da privacidade menos conhecidos

The Codest

Tomasz Szkaradek

Arquiteto de desenvolvimento

Uma das caraterísticas mais adoradas do Ruby é a sua sintaxe muito flexível. Pessoalmente, adoro Ruby pela quantidade de possibilidades que temos para definir classes e as suas propriedades, e é isto que vou discutir neste artigo.

Soluções de base

Vamos supor que estamos a utilizar a classe Foo que tem um método público e um método privado:

classe Foo
  def bar
    :awesome
  fim

  privado

  def baz
    :algo_privado
  fim
fim

Tudo é ótimo, vemos uma solução deste tipo em praticamente todos os projeto. Em curso Foo.new.baz provocará o erro NoMethodError (método privado "baz" chamado para # ) e era isso que pretendíamos fazer. O que acontece se tentarmos alterar o formato de gravação e adicionarmos private como prefixo na definição da classe?

classe Foo
  def bar
    :awesome
  fim

  private def baz
    :algo_privado
  fim
fim

Como se pode ver, depois de executar o código, funciona de facto! Porque é que podemos introduzir a visibilidade do método antes de o fazer? Porque ao definir um método, def devolve o nome do método como um símbolo. Esta expressão não é apenas uma parte da sintaxe, mas de facto um método derivado da classe Module e que trata este símbolo como um argumento. Para mais informações, consulte a documentação nesta ligação. Uma vez que começou tão facilmente com private, vamos tentar alterar a visibilidade do método private.

classe Foo
  def bar
    :awesome
  fim

  private def baz
    :algo_privado
  fim

  public :baz
fim

O que é que acontece depois de executar o código?

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

Sucesso! O nosso método de bases tornou-se público porque o tornámos visível duas vezes. Naturalmente, a mesma operação aplica-se aos módulos.
​
Ótimo, mas onde é que se obtém nós?
​
Esta funcionalidade dá-nos muitas vantagens, porque podemos alterar livremente a visibilidade de um método enquanto o definimos, ou mesmo alterar a visibilidade dos métodos quando os herdamos.

Agora, vamos ver o que Rubi 2.7 pode fazer em termos de alteração da visibilidade dos pseudónimos e dos acessores.

classe Foo
  private attr_accessor :awesome_variable
final

Infelizmente, recebemos um erro porque o método privado espera símbolos e attr_accessor. O código devolve nil e, portanto, este método não é compatível com a utilização privada em Ruby 2.7. Então, quais são as nossas opções?

  1. Podemos utilizar attr_accessor sob a palavra-chave private para o fazer funcionar, ou seja, obteremos um erro quando quisermos fazer referência ao variável_fantástica variável_fantástica método.
classe Foo
  privado

  attr_accessor :variável_fantástica
final
  1. A segunda opção é executar o método privado em métodos gerados por atributo_atributoNeste caso, também temos de nos lembrar de introduzir o setter.
classe Foo
  attr_accessor :variável_impressionante

  private :awesome_variable, :awesome_variable=
fim

Problemas com o attr_ * não são os únicos obstáculos. Podemos encontrar a mesma dificuldade quando queremos criar um alias privado.

classe Foo
  private alias :bar, :awesome_bar
fim

Ruby 3.0 e a nossa atividade

Felizmente, o Ruby 3.0 introduz uma grande mudança, uma vez que os métodos de visibilidade podem receber uma matriz como argumento e o alias de métodos, attr_ *, pode repor a matriz com os nomes dos métodos que foram definidos. Pode ler mais em aqui.

Agora, vamos ver alguns exemplos na última euba e verificar se as alterações foram realmente efectuadas e como podemos utilizá-las.
​
No primeiro exemplo, vamos utilizar private antes do acessório attr:

classe Foo
  private attr_accessor :awesome_variable
final

Essa chamada não causará erros na análise da sintaxe e, o que é importante, o variável_incrível evariável_fantástica =tornam-se privados.
​
O método alias fará o mesmo, mas agora também devolve um símbolo como o nome do novo método e torna-o visível.

classe Foo
  private alias :bar, :awesome_bar
fim

Um facto interessante é que também podemos aprofundar outros métodos, por exemplo, o fantásticoo módulo de impressão pode ser chamado entre private e attré importante que esse método devolva uma matriz com os nomes dos métodos que estão do lado direito da expressão.

classe Módulo
  def awesome_print(nomes)
    coloca nomes
    nomes
  fim
fim
classe Foo
  private awesome_print attr_reader :awesome_bar
end 

Resumo

Espero que este artigo vos seja útil! Em caso de mais notícias sobre Ruby 3.0. leia mais aqui.

Boa codificação!

Oferta para programadores Ruby

Ler mais:

Calem-se e levem o vosso dinheiro #1: Custos ocultos e verdadeira agilidade no processo de desenvolvimento de produtos

Desafios do CTO - aumento de escala e crescimento de produtos de software

Artigos relacionados

Ilustração de uma aplicação de cuidados de saúde para smartphone com um ícone de coração e um gráfico de saúde em ascensão, com o logótipo The Codest, representando soluções digitais de saúde e HealthTech.
Desenvolvimento de software

Softwares para o setor de saúde: Tipos, casos de uso

As ferramentas em que as organizações de cuidados de saúde confiam atualmente não se assemelham em nada às fichas de papel de há décadas atrás. O software de cuidados de saúde apoia agora os sistemas de saúde, os cuidados aos doentes e a prestação de cuidados de saúde modernos em...

OCODEST
Ilustração abstrata de um gráfico de barras em declínio com uma seta ascendente e uma moeda de ouro que simboliza a eficiência ou a poupança de custos. O logótipo The Codest aparece no canto superior esquerdo com o slogan "In Code We Trust" sobre um fundo cinzento claro
Desenvolvimento de software

Como dimensionar a sua equipa de desenvolvimento sem perder a qualidade do produto

Aumentar a sua equipa de desenvolvimento? Saiba como crescer sem sacrificar a qualidade do produto. Este guia cobre sinais de que é hora de escalar, estrutura da equipe, contratação, liderança e ferramentas - além de como o The Codest pode...

OCODEST
Desenvolvimento de software

Construir aplicações Web preparadas para o futuro: ideias da equipa de especialistas do The Codest

Descubra como o The Codest se destaca na criação de aplicações web escaláveis e interactivas com tecnologias de ponta, proporcionando experiências de utilizador perfeitas em todas as plataformas. Saiba como a nossa experiência impulsiona a transformação digital e o negócio...

OCODEST
Desenvolvimento de software

As 10 principais empresas de desenvolvimento de software sediadas na Letónia

Saiba mais sobre as principais empresas de desenvolvimento de software da Letónia e as suas soluções inovadoras no nosso último artigo. Descubra como estes líderes tecnológicos podem ajudar a elevar o seu negócio.

thecodest
Soluções para empresas e escalas

Fundamentos do desenvolvimento de software Java: Um Guia para Terceirizar com Sucesso

Explore este guia essencial sobre o desenvolvimento de software Java outsourcing com sucesso para aumentar a eficiência, aceder a conhecimentos especializados e impulsionar o sucesso do projeto com The Codest.

thecodest

Subscreva a nossa base de conhecimentos e mantenha-se atualizado sobre os conhecimentos do sector das TI.

    Sobre nós

    The Codest - Empresa internacional de desenvolvimento de software com centros tecnológicos na Polónia.

    Reino Unido - Sede

    • Office 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polónia - Pólos tecnológicos locais

    • Parque de escritórios Fabryczna, Aleja
      Pokoju 18, 31-564 Cracóvia
    • Embaixada do Cérebro, Konstruktorska
      11, 02-673 Varsóvia, Polónia

      The Codest

    • Início
    • Sobre nós
    • Serviços
    • Case Studies
    • Saber como
    • Carreiras
    • Dicionário

      Serviços

    • Aconselhamento
    • Desenvolvimento de software
    • Desenvolvimento backend
    • Desenvolvimento de front-end
    • Staff Augmentation
    • Programadores de back-end
    • Engenheiros de nuvem
    • Engenheiros de dados
    • Outros
    • Engenheiros de GQ

      Recursos

    • Factos e mitos sobre a cooperação com um parceiro externo de desenvolvimento de software
    • Dos EUA para a Europa: Porque é que as empresas americanas decidem mudar-se para a Europa?
    • Comparação dos centros de desenvolvimento da Tech Offshore: Tech Offshore Europa (Polónia), ASEAN (Filipinas), Eurásia (Turquia)
    • Quais são os principais desafios dos CTOs e dos CIOs?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Direitos de autor © 2026 por The Codest. Todos os direitos reservados.

    pt_PTPortuguese
    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 cs_CZCzech pt_PTPortuguese