Considere a classe Ruby a seguir: class Pessoa def muda...
class Pessoa
def muda_nome(novo_nome)
@nome = novo_nome
end
def diz_nome
"meu nome é #{@nome}"
end
end
É correto afirmar que
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: B - utiliza-se a instrução p = Pessoa.new
para instanciar um objeto p
da classe Pessoa
.
Vamos entender por que essa alternativa é a correta:
No contexto da linguagem de programação Ruby, a criação de um novo objeto é feita chamando o método new
sobre a classe desejada. No caso da classe Pessoa
, para criar uma nova instância e atribuí-la à variável p
, usa-se exatamente a instrução p = Pessoa.new
. Esse processo é conhecido como instanciação e o objeto criado é chamado de instância da classe.
As outras alternativas falham nos seguintes pontos:
- A Alternativa A menciona que as variáveis de instância são sempre protegidas, o que não é inteiramente verdade. Elas são acessíveis dentro dos métodos da própria instância e, por padrão, não são acessíveis diretamente fora da classe, mas isso não significa que são sempre protegidas, pois podem ser expostas por meio de métodos acessores (
attr_reader
,attr_writer
,attr_accessor
). - A Alternativa C apresenta um erro de sintaxe ao tentar passar o parâmetro para o método
muda_nome
. A sintaxe correta seriap.muda_nome("João")
, sem o @ antes das aspas e com as aspas corretas. - A Alternativa D contém um erro no nome da função de saída padrão do Ruby. A função correta para imprimir uma string seguida de uma quebra de linha é
puts
, e nãoputz
. - A Alternativa E usa a notação incorreta para chamar um método em Ruby. O operador
->
não é utilizado em Ruby para esse propósito. A chamada de métodos é feita utilizando o ponto (.
), como emp.diz_nome
.
Portanto, a alternativa B é a única correta porque segue a sintaxe correta de Ruby para instanciar um novo objeto da classe Pessoa
.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
a) atributos, também conhecidos como variáveis de instância, não são sempre protegidos e começam com @.
c) para chamar o método muda_nome por meio de um objeto p da classe Pessoa passando como parâmetro o nome João utiliza-se a instrução p.muda_nome("João").
d) para imprimir o retorno do método diz_nome utiliza-se a instrução puts p.diz_nome.
e) para chamar o método diz_nome por meio de um objeto p da classe Pessoa utiliza-se a instrução p.diz_nome.
Sacanagem...
"variáveis de instância são sempre protegidos (privados)"
protegido = protected
privado = private
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo