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, Fernando Hamasaki de Amorim atua em projetos utilizando Ruby e Rails. Pós-graduado em Tecnologias Web Fiap, trabalha desde 2000 com desenvolvimento web, onde já desenvolveu em várias plataformas e linguagens, como .NET, Java, JavaScript, PHP e ASP. Também foi palestrante do FISL e da RubyConf Brasil. 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