IT Mídia
Notícias em destaque

Acessores e modificadores de atributos

30 de abril de 2011 21:35

Dando continuidade ao post “Um pouco sobre classes”, vamos incrementar a classe que criamos com acessores e modificadores de atributos.

Primeiro vamos relembrar como ficou nossa classe Dog:

Depois que criamos uma instância de Dog, passando um nome e uma raça, não conseguimos recuperar esses valores individualmente.

Para fazer isso, vamos criar método acessores que irão retornar os valores das variáveis de instância @name e @breed.

E então chamamos os novos métodos:

Agora, além de recuperar, queremos também configurar o nome e a raça, criando mais dois novos métodos que atribuem valores para as variáveis de instância @name e @breed:

E chamando os novos métodos:

Um tanto estranho essas chamadas de método, não? Vamos melhorar um pouco. Primeiro vamos omitir os parentêses:

Agora colocar um espaço antes do “=”:

Bem melhor, não? Dessa forma a impressão que temos é que os valores estão sendo atribuídos diretamente para name ou breed, quando na verdade continuamos chamando os mesmos métodos anteriores. Mas como é possível chamar os métodos dessa forma?

Para facilitar a legibilidade do código em Ruby, há algumas exceções de sintaxe, conhecidas como Syntatic Sugar. Uma delas é poder chamar um método que termine com “=” colocando um espaço entre o nome do método e o “=”. E como os parentêses são opcionais nas chamadas de métodos, ao invés de:

Podemos usar:

Como a criação desses métodos acessores e modificadores (getters and setters) é bastante comum, Ruby fornece um recurso para automatizá-la. Os métodos attr_reader e attr_accessor podem ser chamados dentro da definição de uma classe. Eles recebem um ou mais nomes de métodos no formato de símbolos como parâmetro.

O attr_reader irá criar método acessor do atributo e o attr_accessor irá criar tanto o método acessor quanto o modificador do atributo. Esses dois métodos também irão criar variáveis de instância para os atributos passados.

Na nossa classe Dog, vamos utilizar o attr_accessor para name e breed:

E o uso dos métodos criados:

Para finalizar, o código completo de como ficou a classe Dog:

TAGS: ruby

Sobre Fernando Hamasaki de Amorim

Desenvolvedor sênior na Locaweb, empresa na qual está desde 2007, Fernando Hamasaki de Amorim trabalha desde a criação até a arquitetura, modelagem, análise e integração de sistemas e aplicativos na companhia. Graduado em Tecnologia em Informática pela UniSant'Anna, o profissional possui pós-graduação em Tecnologias Web com Ênfase em Java pela Fiap. Já atuou em diversas outras companhias, tais como a TV Online, empresa brasileira pioneira em transmissões ao vivo e SAC Sistemas, que desenvolve ERP. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.

Entre em contato com Fernando Hamasaki de Amorim

Parceiros

Portais: IT Mídia | IT Web | Saúde Web

Publicações: InformationWeek Brasil | CRN Brasil | FH

Fóruns: IT Forum | IT Forum + | IT Business Forum | Saúde Business Forum