fast red car

Dicas de performance pra Ruby: modifique as variáveis usando os métodos com bang!

Métodos com bang (!)

No Ruby temos as versões com bang (!) de vários métodos das classes principais, como: collect!, downcase!, flatten!, reverse! e capitalize!.

Essas variações dos métodos, na maioria das vezes, indica que você vai modificar o objeto ao invés de fazer uma cópia do objeto, altera-la e retorna-la.

Como economizar memória

Pela explicação você já deve ter percebido essa prática forma de economizar memória no Ruby: usar os métodos com bang sempre que possível!

Vamos exemplificar com código. Começaremos criando uma string com 50 megas:

huge_string = 'a' * 1024 * 1024 * 50

Agora, se usarmos o método upcase pra colocar todas as letras para maiúscula, o sistema precisará alocar mais 50 megas de memória só para fazer essa alteração:

huge_string = huge_string.upcase

Porém, usando a versão com bang, upcase!, essa enorme string não precisará ser replicada e evitaremos esse uso extra de memória!

Vale só para strings?

Nope! Isso serve pra tudo: hash, array, enumerable, etc…

A regra é simples: se não precisa copiar a variável, procure usar o método que faz a modificação in place ;D

Leave a Comment