Détails
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,""
," ; "
,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 ?
1093
3
.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 :L'exécution de
.empty?
sur quelque chose qui est nil lancera uneNoMethodError
.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..blank?
évalue également vrai sur les chaînes de caractères qui ne sont pas vides mais qui ne contiennent que des espaces :[Rails fournit également][2]
.present?
, qui renvoie la négation de.blank?
.Problème de tableau :
blank?
renvoiefalse
même si tous les éléments d'un tableau sont vides. Pour déterminer le caractère vide dans ce cas, utilisezall?
avecblank?
, par exemple :[1] : http://apidock.com/rails/Object/blank%3F [2] : http://apidock.com/rails/Object/presence
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.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 avecif something
ouunless something
, puis j'utiliseblank?
là où c'est nécessaire car cela semble fonctionner partout.