176 votes

Existe-t-il un meilleur moyen de vérifier que Nil ou Longueur == 0 d'une chaîne en Ruby ?

Existe-t-il un meilleur moyen que le suivant pour vérifier si une chaîne est nulle OU a une longueur de 0 en Ruby ?

if !my_string || my_string.length == 0
  return true
else
  return false
end

En C#, il y a le très pratique

string.IsNullOrEmpty(myString)

Y a-t-il quelque chose de similaire à cela dans Ruby ?

16 votes

C'est redondant d'avoir une déclaration if comme ça : "si (condition) alors vrai sinon faux". La condition elle-même a la même véracité que l'énoncé if.

0 votes

my_string || my_string.length == 0 soulèvera un NoMethodError si my_string est nulle. Je pense que tu voulais dire : my_string.nil? || my_string.length == 0

1 votes

Devrait-il être !my_string || my_string.length == 0

232voto

Ezran Points 849

Lorsque je ne suis pas préoccupé par les performances, j'utilise souvent ceci :

if my_string.to_s == ''
  # It's nil or empty
end

Il existe bien sûr différentes variantes...

if my_string.to_s.strip.length == 0
  # It's nil, empty, or just whitespace
end

2 votes

La variation utilisant strip peut être assez inefficace.

11 votes

Une autre méthode intéressante est my_string.to_s.empty ?

0 votes

Pour la plupart des gens, la première option sera tout à fait acceptable, et se lit bien.

72voto

Avdi Points 13086

Si vous êtes prêt à exiger ActiveSupport, vous pouvez simplement utiliser l'option #blank? qui est définie à la fois pour NilClass et String.

16 votes

Notez qu'une chaîne ne contenant que des espaces est toujours considérée comme vide. Donc " ".blank ? est vrai.

2 votes

De même, les booléens false, {} et [] sont considérés comme des blancs. C'est-à-dire que {}.blank ?, [].blank ?, false.blank ? valent tous true.

67voto

Vinay Sahni Points 979

J'aime procéder de la manière suivante (dans un environnement non Rails/ActiveSupport) :

variable.to_s.empty?

ça marche parce que :

nil.to_s == ""
"".to_s == ""

4 votes

Une bonne explication string.to_s.empty? fonctionne pour les deux nil et "" .

32voto

Romulo Ceccon Points 5402

Une alternative à la proposition de jcoby serait :

class NilClass
  def nil_or_empty?
    true
  end
end

class String
  def nil_or_empty?
    empty?
  end
end

10 votes

Mais mais La bibliothèque de base de Ruby implémente déjà cela. nil.to_s => "", donc vous pouvez dire thing.to_s == "".

2 votes

@DigitalRoss Cela permet d'éviter la conversion des chaînes de caractères qui peut ou non poser un léger problème de performance.

31voto

Honza Points 2771

Comme il a déjà été dit ici, les Rails (ActiveSupport) ont une fonction très pratique vierge ? et elle est mise en œuvre comme suit :

class Object
  def blank?
    respond_to?(:empty?) ? empty? : !self
  end
end

Assez facile à ajouter à tout projet basé sur Ruby.

La beauté de cette solution est qu'elle fonctionne de manière auto-magique non seulement pour les chaînes de caractères mais aussi pour les tableaux et autres types.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X