Ruby: constantes (Junior)
O curso trata das constantes em Ruby: nomes que começam com letra maiúscula, decididos quando o código é lido. Ele mostra por que reatribuir uma constante só gera aviso e por que o objeto por trás dela ainda pode mudar se não estiver congelado. Explica os dois caminhos de busca, o escopo léxico via Module.nesting e a cadeia de ancestors como alternativa. Depois aborda const_get, const_set e const_defined?, e como o autoloading do Zeitwerk cria constantes de namespace. No fim há um desafio com uma constante Hash congelada.
O que você vai aprender
- ✓Como o Ruby reconhece uma constante e as convenções SCREAMING_SNAKE_CASE e CamelCase
- ✓Por que reatribuir gera aviso e como o .freeze impede a mutação de constantes Array, Hash e String
- ✓Como o escopo léxico percorre Module.nesting para achar uma constante
- ✓Como a cadeia de ancestors serve de alternativa quando a busca léxica não acha nada
- ✓O uso de const_get, const_set e const_defined? com nomes conhecidos só em tempo de execução
- ✓Como o Zeitwerk autovivifica módulos de namespace e quando um arquivo de namespace acrescenta comportamento
O que faz uma constante
O Auth::PasswordPolicy desta app começa com três linhas que decidem como toda senha da app é validada:
Ler a aula completa grátis →Currículo
7 aulasO que faz uma constante
Um nome que começa com maiúscula é constante, e reatribuí-lo imprime um aviso em vez de levantar erro.
Constantes ainda podem ser mutadas
Mudar o objeto para o qual a constante aponta não gera aviso, então constantes Array e Hash precisam de .freeze.
Escopo léxico e busca de constantes
O Ruby procura nos módulos que envolvem o código, listados por Module.nesting, e repete essa busca a cada chamada.
O fallback pela cadeia de ancestrais
Quando a busca léxica falha, o Ruby checa a cadeia de ancestors e levanta NameError se nenhum caminho acha a constante.
const_get, const_set e reflexão
const_get, const_set e const_defined? leem, definem e checam constantes cujo nome está guardado como string ou símbolo.
Constantes e o autoloading do Zeitwerk
O Zeitwerk transforma caminhos de arquivo em constantes e cria módulos de namespace vazios quando não há arquivo correspondente.
Juntando tudo
Uma revisão dos temas do curso seguida de um desafio que lê taxas de uma constante Hash congelada.