Conceitos de Ruby

Conceitos essenciais da linguagem Ruby explicados a fundo, um de cada vez.

Ordenar

Object Model & Metaprogramming

1

Padrões de Projeto Embutidos na Biblioteca Padrão do Ruby

Decorator, Observer e Singleton já vêm com o Ruby como delegate, observer e singleton, mas a maioria das bases de código reimplementa os três à mão. SimpleDelegator encaminha tudo que você não sobrescreveu (e permite trocar o alvo), DelegateClass(Array) é composição onde você teria feito subclasse de Array, e Singleton fecha os vazamentos de dup/clone/Marshal mais a corrida de thread que um @instance ||= new feito à mão sempre deixa passar.

2

Ruby::Box: Isolamento de Namespace em Processo

O container experimental do Ruby 4.0 para isolar constantes, monkey patches e bibliotecas carregadas dentro de um único processo; o que ele de fato separa, e por que é isolamento de namespace, não paralelismo.

3

Method e UnboundMethod: Objetos, Não Só Chamadas

obj.method(:name) te entrega um valor chamável que você pode compor com >> e <<, curry, e inspecionar; unbind remove o receptor para que a implementação de um módulo possa ser bind_call'd em um objeto que nunca o incluiu.

4

instance_eval, class_eval e a Construção de DSLs Internas

Por que class_eval define métodos de instância e instance_eval define métodos de classe, as variantes _exec que corrigem a armadilha da ivar desaparecida, e como DSLs internas estilo RSpec são construídas sobre a mesma troca de self.

5

self, Classes Singleton, e Por Que Métodos de Classe Não Existem de Verdade

self controla onde @var mora e quem recebe uma chamada de método nua; classes singleton explicam por que "métodos de classe" são só métodos definidos no próprio objeto classe.

6

Reflexão e Introspecção

method_missing vs. define_method, source_location, ObjectSpace, e os hooks included/extended por trás do ActiveSupport::Concern.

7

O Modelo de Objetos do Ruby e a Busca de Métodos

Como include, extend e prepend de fato mudam a cadeia de busca de métodos, e por que isso importa mais do que decorar as três palavras-chave.

Concurrency

Collections & Blocks

Language Core & Idioms

1

Mudanças na Linguagem Ruby: da 2.0 à 4.0

A separação de argumentos nomeados na 3.0, Ractors, Set virando core, Prism como parser padrão na 3.4, e *nil não convertendo mais via to_a na 4.0, a linha do tempo que os outros conceitos de Ruby desta plataforma assumem que você já conhece.

2

Ruby Tipado: RBS e Sorbet

O Ruby é dinamicamente mas fortemente tipado, e duas camadas de tipagem opcional muito diferentes ficam por cima; RBS vem com o Ruby, mantém assinaturas em arquivos separados sig/*.rbs, e nunca afeta o runtime, enquanto o Sorbet (Stripe) coloca blocos sig dentro dos seus arquivos .rb e os verifica em tempo de execução também, levantando um TypeError real em um argumento errado.

3

Regex em Ruby Além do Básico, e a Armadilha do ReDoS

Os recursos de regex além de /pattern/, literais %r{}, match? vs. os globais $~, /i /m /x /o, grupos nomeados, substituição via Hash e bloco, Regexp.union, além do backtracking catastrófico, por que acontece, o que a correspondência em tempo linear do Ruby 3.2 cobre (e o que não cobre), e como Regexp.timeout= transforma uma CPU travada em uma exceção tratável.

4

Armadilhas Comuns do Ruby: Bugs Silenciosos que Vale a Pena Saber de Cor

As armadilhas que não produzem erro nenhum, um setter sem self. virando uma variável local, um initialize com erro de digitação que nunca roda, {} vs do...end vinculando o bloco à chamada errada, além de source_location, sync = true e freeze como as ferramentas que tornam bugs silenciosos ruidosos.

5

Duck Typing e Protocolos de Conversão

O tipo de um objeto é o conjunto de mensagens ao qual ele responde, não sua classe, mais a divisão entre conversão explícita (to_s) e implícita (to_str), que decide se o próprio Ruby vai tratar seu objeto como substituível por um tipo embutido.

6

Exceções como Controle de Fluxo: o que Elas Realmente Custam

A hierarquia de exceções, ensure/retry, e por que catch/throw é a ferramenta mais barata para sair de código aninhado que não é um erro.

7

Pattern Matching em Ruby

Desestruturando arrays, hashes e objetos customizados com case/in, correspondência estrutural, binding, guardas e o operador pin.

Performance & Internals

Testing

Tooling & Debugging

Web & Frameworks