Existe-t-il un meilleur moyen que le suivant pour vérifier si une chaîne est nil OR a une longueur de 0 en Ruby?
if !my_string || my_string.length == 0
return true
else
return false
end
En C #, c'est pratique
string.IsNullOrEmpty(myString)
Quelque chose de semblable à celui de Ruby?
Quand je ne m'inquiète pas de la performance, j'utilise souvent ceci:
if my_string.to_s.empty?
# It's nil or empty
end
Si vous souhaitez exiger ActiveSupport, vous pouvez simplement utiliser la méthode #blank?
, qui est définie pour NilClass et String.
J'aime procéder comme suit (dans un environnement autre que Rails/ActiveSupport):
variable.to_s.empty?
cela fonctionne parce que:
nil.to_s == ""
"".to_s == ""
Une alternative à la proposition de JCY serait:
class NilClass
def nil_or_empty?
true
end
end
class String
def nil_or_empty?
empty?
end
end
Comme il a été dit ici avant que Rails (ActiveSupport) ait un utilitaire blank? La méthode et elle est implémentée comme ceci:
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 automatiquement, non seulement pour les chaînes, mais également pour les tableaux et d’autres types.
variable.blank? va le faire . Il renvoie true si la chaîne est vide ou si la chaîne est nil.
nil?
peut être omis dans des contextes booléens. Généralement, vous pouvez utiliser ceci pour répliquer le code C #:
return my_string.nil? || my_string.empty?
Tout d’abord, méfiez-vous de cette méthode:
Comme Jesse Ezel dit:
"La méthode peut sembler pratique, mais la plupart du temps, j’ai trouvé que cette situation résultait de la tentative de dissimuler des bogues plus profonds.
Votre code doit être conforme à un protocole particulier sur l'utilisation de chaînes et vous devez comprendre son utilisation dans le code de la bibliothèque et dans le code avec lequel vous travaillez.
Le protocole NullOrEmpty est généralement une solution miracle (le vrai problème réside donc toujours ailleurs, et vous avez deux protocoles utilisés) ou un manque d'expertise dans un protocole particulier lors de l'implémentation d'un nouveau code (et encore, vous devriez vraiment savoir quoi). vos valeurs de retour sont). "
Et si vous corrigez la classe String ... assurez-vous que NilClass n'a pas été corrigé non plus !
class NilClass
def empty?; true; end
end
Chaque classe a une méthode nil?
:
if a_variable.nil?
# the variable has a nil value
end
Et les chaînes ont la méthode empty?
:
if a_string.empty?
# the string is empty
}
Rappelez-vous qu'une chaîne ne pas est égale à nil
lorsqu'elle est vide, utilisez donc la méthode empty?
pour vérifier si une chaîne est vide.
Une autre option consiste à convertir nil en un résultat vide à la volée:
(my_string||'').empty?
Konrad Rudolph a la bonne réponse.
Si cela vous gêne vraiment, monkey corrige la classe String ou l'ajoute à une classe/module de votre choix. Ce n'est vraiment pas une bonne pratique de corriger les objets de base du singe, sauf si vous avez une raison vraiment convaincante.
class String
def self.nilorempty?(string)
string.nil? || string.empty?
end
end
Ensuite, vous pouvez faire String.nilorempty? mystring
Il y a quelques bonnes réponses ici, mais vous n'avez pas besoin d'ActiveSupport ou du patch-singe pour traiter le cas d'utilisation courant ici. Par exemple:
my_string.to_s.empty? if defined? my_string
Ceci "fera le bon choix" si my_string est nul ou une chaîne vide, mais ne générera pas d'exception NameError si my_string n'est pas défini. Ceci est généralement préférable aux plus artificiels:
my_string.to_s.empty? rescue NameError
ou sa plus bavarde, parce que les exceptions doivent vraiment être sauvegardées pour des choses que vous attendez {pas _. Dans ce cas, bien que cela puisse être une erreur courante, une variable non définie n'est pas vraiment une circonstance exceptionnelle, elle doit donc être traitée en conséquence.
Votre kilométrage peut varier.
Avez-vous essayé les raffinements?
module Nothingness
refine String do
alias_method :nothing?, :empty?
end
refine NilClass do
alias_method :nothing?, :nil?
end
end
using Nothingness
return my_string.nothing?
Pour les golfeurs de code (nécessite Ruby 2.3 ou version ultérieure):
if my_string&.> ""
p 'non-empty string'
else
p 'nil or empty string'
end
Dans Rails, vous pouvez essayer #blank?
.
Attention: cela vous donnera des résultats positifs lorsque la chaîne est composée d'espaces:
nil.blank? # ==> true
''.blank? # ==> true
' '.blank? # ==> true
'false'.blank? # ==> false
Je voulais juste le signaler. Peut-être que cela répond à vos besoins
UPD. pourquoi ai-je de vieilles questions dans mon fil? ?__. Désolé pour le nécropostage.