Une explication concise de nil v. empty v. blank en Ruby on Rails

Je me retrouve régulièrement à la recherche d'une définition claire des différences entre " nil ", " blank " et " empty " dans Ruby on Rails. Voici ce que j'ai trouvé de plus proche :

  • Les objets blank? sont faux, vides, ou une chaîne d'espacement. Par exemple, "", &quot ; ", nil, [], et {} sont vides.

  • Les objets nil? sont des instances de NilClass.

  • Les objets empty? sont spécifiques à une classe, et leur définition varie d'une classe à l'autre. Une chaîne de caractères est vide si elle ne contient aucun caractère, et un tableau est vide s'il ne contient aucun élément.

Y a-t-il quelque chose qui manque, ou une comparaison plus serrée qui peut être faite ?

Solution

.nil? peut être utilisé sur n'importe quel objet et est vrai si l'objet est nul.

.empty? peut être utilisé sur les chaînes, les tableaux et les hachages et renvoie vrai si :

  • Longueur de la chaîne == 0
  • Longueur du tableau == 0
  • Longueur du hachage == 0

L'exécution de .empty? sur quelque chose qui est nil lancera une NoMethodError.

C'est là que .blank? entre en jeu. Il est [implémenté par Rails][1] et peut opérer sur n'importe quel objet et fonctionner comme .empty? sur les chaînes, les tableaux et les hachages.

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? évalue également vrai sur les chaînes de caractères qui ne sont pas vides mais qui ne contiennent que des espaces :

"  ".blank? == true
"  ".empty? == false

[Rails fournit également][2] .present?, qui renvoie la négation de .blank?.

Problème de tableau : blank? renvoie false même si tous les éléments d'un tableau sont vides. Pour déterminer le caractère vide dans ce cas, utilisez all? avec blank?, par exemple :

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

[1] : http://apidock.com/rails/Object/blank%3F [2] : http://apidock.com/rails/Object/presence

Commentaires (12)

Une différence est que .nil? et .empty? sont des méthodes fournies par le langage de programmation Ruby, alors que .blank? est quelque chose ajouté par le framework de développement web Rails.

Commentaires (0)

N'oubliez pas any? qui est généralement !empty?. Dans Rails, je vérifie généralement la présence de quelque chose à la fin d'une déclaration avec if something ou unless something, puis j'utilise blank? là où c'est nécessaire car cela semble fonctionner partout.

Commentaires (2)