Temos diversos métodos em Ruby para validar diferentes tipos de objetos, como empty?
ou includes?
, que podem ser usados em Array. Em Rails temos os métodos blank?
e present?
definidos no ActiveSupport.
Esses métodos podem ser usados para resolver problemas quando o objeto X responde somente a métodos Y. Eles são definidos na classe Object
, então todo objeto em Rails consegue responder a esses métodos. Vamos falar um pouco sobre eles?
blank?
O método blank?
, como o nome diz, verifica se o conteúdo daquele objeto é vazio, isto é, em branco. Dependendo do tipo de objeto em que ele for chamado, seu comportamento será diferente. Vamos ver alguns exemplos:
# strings
"".blank?
# => true
" ".blank?
# => true
"banana".blank?
# => false
# enumerators
[].blank?
# => true
{}.blank?
# => true
[nil].blank?
# => false
["", " "].blank?
# => false
# outros tipos
nil.blank?
# => true
10.blank?
# => false
present?
O método present?
é exatamente o oposto do blank?
. Você pode ver a implementação aqui. Vamos aos exemplos:
# strings
"".present?
# => false
" ".present?
# => false
"banana".present?
# => true
# enumerators
[].present?
# => false
{}.present?
# => false
[nil].present?
# => true
["", " "].present?
# => true
# outros tipos
nil.present?
# => false
10.present?
# => true
No final pode parecer que não faz tanta diferença usar present?
ou blank?
, mas é mais fácil ler um código como if user.present?
do que unless user.blank?
ou if person.blank?
ao invés de unless person.present?
. Usar a legibilidade do código como critério para escolher o método usado é a dica mais valiosa :)
Última dica: em Rails também temos o método present
que retorna o valor do objeto ou nil
se ele não estiver present?
.