O que é um módulo

Prévia grátis 2 min de leitura

Uma terceira palavra-chave, depois de class e def

Os dois cursos anteriores de OOP em Ruby usaram class/end para construir blueprints e def/end para construir métodos. O Ruby tem um terceiro container, module/end. Ele parece quase uma classe, mas faz outro trabalho:

module Greetable
  def greeting
    "Hi, I am a #{self.class}"
  end
end

module Greetable ... end define um container com nome que guarda um método, greeting. Nada aqui cria um objeto, e o próprio Greetable nunca vai criar. É essa a diferença em relação a class com que esta aula começa.

Um módulo não pode ser instanciado

Greetable.class
# => Module, não Class

Greetable.new
# NoMethodError: undefined method 'new' for module Greetable

Greetable.class devolve Module, uma classe embutida diferente de Class. BankAccount.new funcionou durante todo o curso de classes porque BankAccount é uma Class, e .new é um método que toda Class oferece. Module não oferece .new, então a chamada levanta NoMethodError.

Um módulo guarda métodos, mas não tem onde rodá-los

Greetable#greeting é um método comum, def/end como nos cursos anteriores. Ele ainda não tem um objeto onde rodar. Sozinho, Greetable é um pedaço de comportamento sem dono: Ruby válido, mas sem utilidade por si só. As duas próximas aulas mostram as duas formas de ligar esse comportamento a uma classe, include e extend, e cada uma dá um resultado diferente.

O que este curso cobre

  1. O Que É Um Módulo: module/end, e por que um módulo não pode ser instanciado (esta aula)
  2. include Adiciona Métodos de Instância: misturando os métodos de um módulo em cada instância de uma classe
  3. extend Adiciona Métodos de Classe: misturando os métodos de um módulo na própria classe
  4. include vs extend, Mesmo Módulo: o mesmo módulo, das duas formas, lado a lado
  5. Módulos Como Namespaces: um segundo trabalho dos módulos, sem relação com o primeiro
  6. Um Mixin Real: Translatable: o módulo desta app, usado nos models dela
  7. Juntando Tudo: combinando os dois mecanismos num sistema pequeno

No fim, module, include e extend vão ser tão familiares quanto class, initialize e <.

Aula 1 de 7 · grátis

Continue com a aula 2

include adiciona métodos de instância

Mostra como include insere o módulo nos ancestors da classe para que toda instância chame seus métodos.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...