Quelle est la meilleure façon de vérifier si une variable n'est pas vide dans une autre condition si Ruby (pas Rails)?
elsif not variable.to_s.empty?
# do something
end
ou
elsif !variable.to_s.empty?
# do something
end
ou
elsif variable.to_s.length > 0
# do something
end
string = ""
unless string.to_s.strip.empty?
# ...
end
Vous pouvez utiliser soit
unless var.empty?
#do sth
end
ou
unless var == ""
#do sth
end
ou tous avec if
et un negator !
.
Je viens de découvrir que ''.empty?
renvoie true
mais ' '.empty?
renvoie false
. Même to_s.length
pour ' '
n'est pas nul.
Peut-être qu'il est préférable d'utiliser strip comme ' '.strip.empty?
La source de la méthode empty?
est analogue à celle-ci:
def empty?
return length == 0
end
Donc, vous pouvez utiliser en toute sécurité
any_string.length != 0
Quoi qu'il en soit, en utilisant ce code dans un autre if si est un peu prolixe, je vous encourage à définir la méthode present?
dans la classe String
.
class String
def present?
!empty?
end
end
Vous pouvez maintenant écrire votre code de la manière suivante:
if some_condition
# do something
elsif variable.to_s.present?
# do something else
end
De cette façon, vous obtenez un code clair, sans utiliser negations
ou unless
qui sont difficiles à lire.
Bien sûr, il y a un problème ici, j'ai pris le nom present?
(et la méthode) de Rails. present?
renvoie true si l'objet n'est pas vide, mais les chaînes avec des tabulations ou des espaces (caractères blancs) sont considérées comme des blancs. Donc, ce present?
retournera true pour les chaînes suivantes:
"".present? # => false
" ".present? # => true
"\t\n\r".present? # => true
" blah ".present? # => true
Cela dépend de ce que vous voulez, il y a de fortes chances que vous souhaitiez être vrai pour les 3 premières chaînes et faux pour les plus récentes. Vous pouvez utiliser l'approche @RamanSM et utiliser strip
pour éviter les espaces vides
class String
def present?
!strip.empty?
end
end
maintenant, present?
renvoie false pour les chaînes avec des espaces blancs
"".present? # => false
" ".present? # => false
"\t\n\r".present? # => false
" blah ".present? # => true