Dicas para usar true, false ou nil em Ruby
Contexto
A linguagem Ruby tem padrões e boas práticas bastante interessantes. Uma padrão que acho bem legal é o retorno dos método escritos em Ruby. Perceba que todo os métodos do core do Ruby tem os seguintes retornos.
- Retorna o
valor
ounil
.- Para métodos que retornam o valor, quando esse valor não é retornado, então o que é retornado é o
nil
.
- Para métodos que retornam o valor, quando esse valor não é retornado, então o que é retornado é o
- Retorna
true
oufalse
.- Para métodos que retornam um booleano, então sempre um booleano é retornado.
- Não existe método que retorna um
valor
oubooleano
.
Então, quando você for criar seus próprio método, siga essas práticas e mantenha o padrão.
Boas práticas para usar true, false ou nil
0. Retorne true ou false
-
Em seus métodos escritos em ruby, caso precise retornar uma simples informação se deu certo ou não, retorne
true
oufalse
, pois são objetos simples e fácil de entender quando uma pessoa for ler seu código -
Os métodos do core do ruby funcionam da mesma maneira, retorna true ou false, mas quando pprecisam retornam algum valor, eles retornam nil ou o valor.
2.odd?
=> false
2.even?
=> true
- Não retorne
nil
para casos negativos, sempre retornefalse
1. Retorne nil
ou objeto
-
Caso precise retornar algum o objeto do método, na ausência de objeto, retorne
nil
. Não retornefalse
- Os métodos do core do ruby funcionam da mesma maneiro e você estará seguindo o padrão da linguagem
"carlos".gsub!"b", "*") => nil
"carlos".gsub!("a", "*") => "c*rlos"
- Dessa forma, podemos escrever um código com uma perfomance melhor, caso queiramos executar uma parte do código somente se o valor for diferente de
nil
.senha = "nova-senha" if senha.gsub!("-", "*") # codigo para ser executado caso a string seja modificada. end
- O mesmo código acima usando um método que não altere o valor do objeto seria escrito da seguinte forma:
senha = "nova-senha" nova_senha = senha.gsub("-", "*") if !nova_senha.nil? # codigo para ser executado caso a string seja modificada. end
-
Dessa forma o código seria menos perfomático, pois teria que alocar memória para salvar a variável
nova_senha
e consequentemente ogarbage collector
entraria em ação para limpar e a execução de tal coletor é um importante fator para a perda de perfomance do código, então sempre tente escrever um código que use o mínimo degarbage collector
. - Mas atenção, nem tudo pode ser perfeito assim. Ao usar métodos que alteram o valor do objeto perdemos a possibilidade escrever o código abaixo, pois agora
gsub!
retonarnil
caso o valor do objeto não seja modificado:# Problemas! senha = "nova-senha" senha.gsub!("b", "*").downcase! => NoMethodError
if senha.gsub!("-", "*") senha.downcase! end
- Todos os métodos do core do ruby funcionam desse jeito, exemplo, veja
a definição no método
downcase!
na documentação para saber mais.downcase!(*args) public Downcases the contents of str, returning nil if no changes were made. See String#downcase for meaning of options and use with different encodings.
2. Resumo
- Retorne
true
oufalse
de seus métodos - Retorne
nil
ouobjeto
de seus métodos- Ganhe em perfomance usando essa característica.
Opa, tudo bem? Antes de você ir, te deixo aqui meu email: [email protected]
Teve alguma dúvida?
Você achou que eu escrevi alguma coisa errada? Erro de português?
Você tem uma forma melhor de resolver o problema?
Você tem alguma sugestão de tópico para eu escrever?
Ou se quiser conversar sobre qualquer outro assunto?
Vamos trocar uma ideia. Sinta-se livre para me enviar um email. Eu lhe responderei com o maior prazer!