Mais
Uma explicação concisa de nulo v. vazio v. em branco em Ruby on Rails
Eu me encontro repetidamente procurando por uma definição clara das diferenças de nil?
, blank?
, e empty?
em Ruby on Rails. Aqui's o I's mais próximo de mim:
- Os objectos são falsos, vazios ou uma cadeia de caracteres em branco. Por exemplo,
""
," "
,nil
,[]
, e{}
estão em branco.
*`nil?`` objetos são instâncias de NilClass.
*empty?
objetos são específicos de classe, e a definição varia de classe para classe. Uma string é vazia se não tiver caracteres, e um array é vazio se não contiver itens.
Falta alguma coisa, ou pode ser feita uma comparação mais apertada?
1093
3
.nil?
pode ser utilizado em qualquer objeto e é verdadeiro se o objeto for nulo..vazio?
pode ser utilizado em cordas, arrays e hashes e retorna verdadeiro se:Executando
.empty?
em algo que é nulo vai jogar umNoMethodError
.É aí que entra o "em branco". Ele é implementado pelo Rails e irá operar em qualquer objeto, bem como trabalhar como
.empty?
em strings, arrays e hashes..em branco?
também avalia verdadeiro em cordas que não são vazias, mas contêm apenas espaço em branco:Rails também fornece
.present?
, que retorna a negação de.blank?
.Array gotcha:
blank?
retornaráfalse
mesmo que todos os elementos de um array estejam em branco. Para determinar a falta de clareza neste caso, utilizeall?
comblank?
, por exemplo:Uma diferença é que
.nil?
e.empty?
são métodos que são fornecidos pela linguagem de programação Ruby, enquanto.blank?
é algo adicionado pelo framework de desenvolvimento web Rails.Não se esqueça do
any?
que geralmente é!vazio?
. No Rails eu normalmente verifico a presença de algo no final de uma declaração comse algo
ouunless something
, então useblank?
onde for necessário, já que parece funcionar em todos os lugares.