3 dicas em ruby que eu não conhecia 🤔

Desde o ano passado criei o hábito de ler artigos, tanto de conteúdo técnico, onde posso melhorar minhas skills como desenvolvedora, ou artigos voltados para produtividade, comunicação e afins. Mas gostaria de focar em 3 dicas que aprendi em 3 diferentes leituras. Decidi colocar em ordem do interessante para o MAIS interessante, para incentivar você ler até o final hahaha ;)

Enumerable#cycle

Você precisa repetir algum padrão? Ou talvez você precise de uma ativação/desativação fácil? Então Enumerable#cycle talvez possa ser o que você esteja procurando! (sim, bem clichê ~ sugiro você ler com voz de comercial de TV).

Exemplo 1:
- Vou em um restaurante e quero dobrar a quantidade de bacon haha

2.3.0 :001 > bacon_slices = %w(bacon)
=> [“bacon”]
2.3.0 :002 > bacon_slices.cycle(2).to_a
=> [“bacon”, “bacon”]

Exemplo 2:
- Na hora de pedir a bebida, quero meu refrigerante sem gelo, olha como vocês podem usar o cycle.

2.3.0 :001 > ice = %w(with without).cycle
=> #<Enumerator: [“with”, “without”]:cycle>
2.3.0 :002 > ice.next
=> “with”
2.3.0 :003 > ice.next
=> “without”

Dig

Dig? Sim, eu lembrei do raça negra "Dig, dig,dig iê" hhaha

Você pode usar o dig para validar elementos de um hash aninhado. Informando as chaves o dig irá buscar o valor, se ele não encontrar o valor, vai retornar nil.

Exemplo:

2.3.4 :001 > dog = {pet: {name: "Thor", age: 1, parents: {mother: "Jessica", father: "Thomaz"}}}
=> {:pet=>{:name=>"Thor", :age=>1, :parents=>{:mother=>"Jessica", :father=>"Thomaz"}}}
2.3.4 :002 > dog[:pet] && dog[:pet][:parents] && dog[:pet][:parents][:mother]
=> "Jessica"
2.3.4 :003 > dog.dig(:pet, :parents, :mother)
=> "Jessica"

Evitando Condicional

Existem alguns condicionais que podemos utilizar em ruby como: if/else, unless ou case. Mas existe um problema quando usamos de forma excessiva esses condicionais, nosso código fica confuso comprometendo o entendimento, me arrisco em dizer que o código pode ficar bem sujo. Mas existe uma técnica para diminuir o uso de condicional deixando o código mais legível, que é através do uso de hash.

Exemplo usando case:

2.3.4 :001 > def adapter(action)
2.3.4 :002?> case action
2.3.4 :003?> when :active_products
2.3.4 :004?> puts ‘ProductsActive’
2.3.4 :005?> when :inactive_products
2.3.4 :006?> puts ‘ProductsInactive’
2.3.4 :007?> when :download_products
2.3.4 :008?> puts ‘ProductsDownload’
2.3.4 :009?> end
2.3.4 :010?> end
=> :adapter
2.3.4 :011 > adapter(:active_products)
ProductsActive
=> nil

Exemplo usando hash:

2.3.4 :001 > def adapter(action)
2.3.4 :002?> batch = {
2.3.4 :003 > active_products: ‘ProductsActive’,
2.3.4 :004 > inactive_products: ‘ProductsInactive’,
2.3.4 :005 > download_products: ‘ProductsDownload’
2.3.4 :006?> }
2.3.4 :007?> batch[action]
2.3.4 :008?> end
=> :adapter
2.3.4 :009 > adapter(:active_products)
=> “ProductsActive”

Demais, né? Eu não vejo a hora de pegar um bug, uma nova funcionalidade ou melhoria para colocar essas dicas em prática ;p

É claro que devem existir inúmeros outros métodos para ajudar a simplificar nosso dia a dia e deixar nosso código mais bonito, caso você conheça algum e queria compartilhar, comente aqui :) vou ficar muito feliz em conhecer.


“Para aprender jogar bola, você vai precisar ir para um campo e jogar. Para construir fortes músculos você precisa ir para a academia e perder alguns quilos. Para aprender a programar, você precisa sentar e codar.” #vamosJuntos